2013-11-02 77 views
2

我有表=>獲得有條件SUM在第一排

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 

我想D1的SUM在第一排的每個PK其中SPK = 0,而不是爲0.

另外,在SPK = 0的情況下,D1始終爲0。我想在基於PK值的SPK = 0的D1字段中顯示SUM。

任何方式獲得在第一行的D1的SUM而不是0其中SPK = 0?

+0

我不知道該怎麼做。預先感謝您的回答。 – sapatelbaps

回答

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 
+0

謝謝。當有更多列時,這是最簡單的方法。 – sapatelbaps

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 
+1

不錯的。只要刪除'左',這是沒有必要的。 –

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