Sql server 一列基于另一列的条件和,然后由第三列分组

Sql server 一列基于另一列的条件和,然后由第三列分组,sql-server,tsql,group-by,Sql Server,Tsql,Group By,假设这样一个表: | A | B | C | ------------- | a | 1 | 1 | | a | 4 | 1 | | b | 2 | 1 | | b | 6 | 3 | | a | 4 | 6 | | b | 2 | 7 | SELECT A, SUM(B*band_1) as band_1, SUM(B*band_2) as band_2 FROM (SELECT A, B, CASE WHE

假设这样一个表:

| A | B | C |
-------------
| a | 1 | 1 |
| a | 4 | 1 |
| b | 2 | 1 |
| b | 6 | 3 |
| a | 4 | 6 |
| b | 2 | 7 |
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
我想得到按
A
分组的
C
不同波段的
B
之和。我可以通过在一个内部查询中为每个带创建一个新列来实现这一点,在我不喜欢的情况下,当我要求和值和0时,该查询具有1:

| A | B | C |
-------------
| a | 1 | 1 |
| a | 4 | 1 |
| b | 2 | 1 |
| b | 6 | 3 |
| a | 4 | 6 |
| b | 2 | 7 |
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
选择A,和(B*带_1)作为带_1,和(B*带_2)作为带_2
从(选择一个,
B
案例

当c5和C时,我不确定为什么需要子查询,如果没有带的模式,可以尝试这种方法

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  
选择一个,

总和(案例C 5和C哦我喜欢这个问题你有这些乐队的模式吗?你知道在查询之前会有多少乐队吗?@EricZ我不确定是否会有模式,但我肯定会知道手上的乐队。如果你有一个依赖于模式的解决方案,它可能仍然值得一看…是的-我很愚蠢。我也检查了一下艾德,有一种模式,它是