假设一个这样的表:
| A | B | C |
-------------
| a | 1 | 1 |
| a | 4 | 1 |
| b | 2 | 1 |
| b | 6 | 3 |
| a | 4 | 6 |
| b | 2 | 7 |
我希望得到B
的不同频段C
的总和A
。我可以通过在内部查询中为每个波段创建一个新列来实现它,当我想要将值和零加在一起时我不喜欢这个:
SELECT A, SUM(B*band_1) as band_1, SUM(B*band_2) as band_2
FROM (SELECT A,
B,
CASE
WHEN C <= 5 THEN 1
ELSE 0
END as band_1,
CASE
WHEN C > 5 and C <= 10 THEN 1
ELSE 0
END as band_2
FROM MyTable) as T
GROUP BY A
哪个有效。但是当我有很多乐队时,这个问题会变得非常笨拙。是否有一些聪明的方法来做得更好?也许使用PIVOT
或动态SQL甚至OLAP或其他东西?
答案 0 :(得分:3)
我不确定为什么你需要一个子查询,如果你没有乐队的模式,也许这样试试
SELECT A,
SUM(CASE WHEN C <= 5 THEN B ELSE 0 END) as band_1,
SUM(CASE WHEN C > 5 and C <= 10 THEN B ELSE 0 END) as band_2
FROM MyTable
GROUP BY A