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

テーブルより上になるようにクエリを変更するにはどうすればよいですか?

4

2 に答える 2

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
于 2013-03-08T19:53:20.553 に答える
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
于 2013-03-08T20:18:03.463 に答える