我有桌子=>

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

我想要每个pk的第一行d1的和,其中spk=0而不是0。
此外,d1总是0,其中spk=0。我想在d1字段中显示和,其中spk=0基于pk值。
在spk=0的情况下,有没有办法得到第一行d1的和而不是0?

最佳答案

使用排名功能(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

09-25 21:42