客户希望区分某些类别的成员,并且不希望区分其他成员。数据看起来像这样(让我们称之为TABLE1):
cola colb value
A a1 10
A a2 12
A b2 25
B zz 12
B w2 14
我想要的输出是cola = A的所有行,就像它们在源表中一样,但我想聚合cola = B的行,并忽略colb中可变值的值。适合的输出如下:
cola colb value
A a1 10
A a2 12
A b2 25
B all 26
现在,我已经使用此查询获得了所需的输出(即“解决了问题”):
SELECT
cola,
'all',
sum(value)
FROM TABLE1 T1
WHERE cola = 'B'
GROUP BY
cola,
'all'
UNION
SELECT *
FROM TABLE1 T2
WHERE cola != 'B'
但是,' TABLE1'实际上是3个其他观点的联盟,虽然这个东西有效但看起来很难看,似乎是蛮力的'对我而言,感觉笨重。你能建议一个更好的方法来思考这个问题吗?
答案 0 :(得分:2)
这是在case
中使用group by
语句的简单问题:
select cola,
(case when cola = 'B' then 'all'
else colb
end),
sum(value)
from TABLE1 T1
group by cola,
(case when cola = 'B' then 'all'
else colb
end);