2013-03-08 68 views
3

我有一個下表如何有條件地加總?

Col1 Col2 Col3 
A1  1  null 
A1  2  null 
B1  5  null 
B2  6  null 
M1  1  M 
M2  2  M 
M3  3  M 
J1  1  J 
J2  2  J 

我想根據Col1中總結col2的。查詢將如下,

select Col1, sum (Col2) 
group by Col1 

但是,如果Col3具有相同的字母,我想總結所有Col1的Col2。所以結果表應該像

Col1 Col2 
A1  3 
B1  5 
B2  6 
M1  6 
M2  6 
M3  6 
J1  3 
J2  3 

如何更改我的查詢以獲得上表?

+1

在你的結果。 J2 = 2而不是3? – TEEKAY 2013-03-08 19:49:08

+0

有些事情與你原來的問題不符。 – 2013-03-08 19:50:10

+0

如果Col3具有相同的字母(非空),我需要總和col2在一起。因此,J1和J2在col3中具有相同的字母J,對於J1和J2,結果都是3。 – GLP 2013-03-08 19:53:09

回答

1

在對問題發表評論/更新後編輯。我不知道一個聰明的方式,好像其他人有一個。

select * from (
select Col1, SUM(Col2) Col2 
from Table 
where Col3 is null 
group by Col1 

union 

select mainset.Col1, tmp.Col2 
from Table mainset 
join 
(
    select Col3, SUM(Col2) Col2 
    from Table 
    where Col3 is not null 
    group by Col3 
) tmp on tmp.Col3 = mainset.Col3 

where mainset.Col3 is not null 
) fullset 
order by fullset.Col1 
+0

我想你讓我和Col2和Col3一起工作。我舉了一個不好的例子,我會更新它。 – GLP 2013-03-08 19:55:26

0

你可以做這樣的事情(我命名的表#A):

;WITH col3Sum AS 
    (
     SELECT Col3, SUM(Col2) SUM3 
     FROM #a 
     WHERE col3 IS NOT NULL 
     GROUP BY col3 
    ), 
     col1Sum AS 
    (
     SELECT Col1, SUM(Col2) sum1 
     FROM #a 
     GROUP BY Col1 
    ) 
    SELECT c1.Col1, ISNULL(c3.SUM3, c1.sum1) AS Col2 
    FROM col1Sum c1 
    LEFT JOIN col3Sum c3 
     ON c1.Col1 LIKE c3.Col3+'%' 
    ORDER BY c1.Col1