在第一行获取条件 SUM
Posted
技术标签:
【中文标题】在第一行获取条件 SUM【英文标题】:Get conditional SUM in first row 【发布时间】:2013-11-02 01:54:30 【问题描述】:我有桌子=>
Main Table : MT
================
PK SPK Name D1
==============
1, 0, XYZ, 0
1, 1, A, 99
1, 2, B, 88
1, 3, C, 77
2, 0, NULL, 0
2, 1, NULL, 99
2, 2, Z, 88
我想从中得到
Result Table : RT
================
PK SPK Name D1
==============
1, 0, XYZ, 264
1, 1, A, 99
1, 2, B, 88
1, 3, C, 77
2, 0, NULL, 187
2, 1, NULL, 99
2, 2, Z, 88
对于每个 SPK=0 而不是 0 的 PK,我希望第一行中的 D1 总和。
此外,当 SPK=0 时,D1 始终为 0。我想根据 PK 值在 SPK=0 的 D1 字段中显示 SUM。
有什么方法可以在第一行获取 D1 的 SUM 而不是 SPK=0 的 0?
【问题讨论】:
我不知道该怎么做。提前感谢您的回答。 【参考方案1】:使用排名功能(sqlserver 2005+)
select PK, SPK, Name,
case when SPK = 0 then sum(D1) over (partition by pk)
else D1 end as D1
from table
order by PK, SPK
【讨论】:
谢谢。当有更多列时,这是最好的方法。【参考方案2】:SELECT
t.pk,
t.spk,
t.name,
CASE WHEN t.spk = 0 THEN ts.d1 ELSE t.d1 END AS d1
FROM your_table t
LEFT JOIN (
SELECT tt.pk, SUM(tt.d1) AS d1
FROM your_table tt
GROUP BY tt.pk
) ts ON t.pk = ts.pk
【讨论】:
不错的一个。把LEFT
去掉就行了,没必要。【参考方案3】:
select PK, SPK, Name,
case when SPK = 0 then ( select Sum( D1 ) from ThineTable where PK = TT.PK )
else D1 end as D1
from ThineTable as TT
order by PK, SPK
【讨论】:
以上是关于在第一行获取条件 SUM的主要内容,如果未能解决你的问题,请参考以下文章
Excel - UDF 函数,用于根据条件从多个工作表中获取 SUM 值