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 ではなく、各 PK の最初の行に D1 の SUM が必要です。

また、SPK=0 の場合、D1 は常に 0 です。PK 値に基づいて SPK=0 の D1 フィールドに SUM を表示したい。

SPK=0 の 0 ではなく、最初の行で D1 の SUM を取得する方法はありますか?

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 に答える