基于另一列的一列的条件和,然后全部按三分组

时间:2014-02-20 13:00:11

标签: sql-server tsql

假设一个这样的表:

| 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或其他东西?

1 个答案:

答案 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