2

我有桌子=>

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?

4

3 回答 3

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
于 2013-11-02T02:00:04.840 回答
2

使用排名功能(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
于 2013-11-02T12:12:11.313 回答
1
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
于 2013-11-02T02:01:38.243 回答