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我不确定是否会有模式,但我肯定会知道手上的乐队。如果你有一个依赖于模式的解决方案,它可能仍然值得一看…是的-我很愚蠢。我也检查了一下艾德,有一种模式,它是