2013-11-02 1 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 

Я хочу SUM из D1 в первом ряду для каждого ПК, где SPK = 0 вместо 0.

Кроме того, D1 всегда 0, где SPK = 0. Я хочу отображать SUM в полях D1, где SPK = 0 на основе значения PK.

Любой способ получить СУММУ D1 в первой строке вместо 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

спасибо. это лучший способ n простой, имея больше столбцов. – 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

Ницца. Просто удалите 'LEFT', это не обязательно. –

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 
Смежные вопросы