我有一个复杂的SQL查询,有几个连接和子查询。我想知道是否有一种简单的方法可以使用GROUP BY子句为分组字段的相同值创建多个组,此时此字段具有一些特殊值。
例如,如果我按fieldA和fieldB进行分组,我会获得fieldA和fieldB的不同值的组,但是当fieldA采用类似“specialValue”的特殊常量值时,为每条记录生成不同的组。
例如,如果我有这个记录:
fieldA | fieldB | fieldC
_______________________
val1 | val2 | 1
val1 | val2 | 2
val2 | valx | 3
val2 | valx | 4
specialValue | vala | 5
specialValue | vala | 6
选择(fieldA,fieldB,max(fieldC)),按(filedA,fieldB)分组但在fieldA中ifgoring“specialValue”,我会得到以下结果:
fieldA | fieldB | fieldC
_______________________
val1 | val2 | 2
val2 | valx | 4
specialValue | vala | 5 <-- Two rows
specialValue | vala | 6 <--
如果没有连接或子查询,我想以最简单的方式获取它,因为查询已经太复杂了。
由于
答案 0 :(得分:0)
您可能希望了解使用多维数据集和/或汇总。
答案 1 :(得分:0)
该表是否具有与这些不同的主键列?你可以这样做:
group by case when fieldA = 'specialValue' then primarykey else fieldA end
答案 2 :(得分:0)
怎么样?
SELECT fieldA, fieldB, MAX(fieldC)
FROM table
WHERE fieldA <> 'specialValue'
GROUP BY fieldA, fieldB
UNION ALL
SELECT fieldA, fieldB, fieldC
FROM table
WHERE fieldA = 'specialValue'
或者使用SUBSELECT
,但ROW_NUMBER
和OVER
子句的可用性取决于您的SQL Server 1 的版本。
SELECT fieldA, fieldB, MAX(fieldC)
FROM (
SELECT fieldA, fieldB, fieldC,
case when fieldA = 'specialValue' then
ROW_NUMBER() over (ORDER BY fieldA)
end as rownum
FROM t
) as subselect
GROUP BY rownum, fieldA, fieldB
1 2008年至今 - source