1

MsSQL 2008 では、最後に 3 つの異なる列の合計を表示しようとしています。

現在、私のクエリは返されますここに画像の説明を入力

これは (@grouping = maingroup,subgroup,subsubgroup,season,vendorid,[01] as '01',[02] as '02',Total) によって選択されます

set @sql = 'select '+@grouping+' from ##aa'
execute sp_executesql @sql

それぞれの列の最後に 01,02 と Total の合計が必要です。ロールアップを使用してみましたが、正しい結果が得られません。おそらく間違っているだけですが、必要なものを取得するには、selectステートメントはどのように見える必要がありますか?

4

2 に答える 2

3

これを行うには 2 つの方法があります。1 つ目は、これを行う sql-server-2008 より前の古い方法ですUNION ALL。最初SELECTにテーブルから元のデータを返し、2 つ目に 01、02、および Total フィールドの合計を返します。

SELECT   maingroup,
         subgroup,
         subsubgroup,
         season,
         vendorid,
         [01] AS '01',
         [02] AS '02',
         Total AS Total
FROM     #aa
UNION ALL
SELECT   null as maingroup,
         null as subgroup,
         null as subsubgroup,
         null as season,
         null as vendorid,
         sum([01]) AS '01',
         sum([02]) AS '02',
         sum(Total) AS Total
FROM     #aa

sql-server-2008 以降では、代わりにこれを使用できますGROUPING SETS。上記のクエリと同等のクエリGROUPING SETSは次のとおりです。

SELECT   maingroup,
         subgroup,
         subsubgroup,
         season,
         vendorid,
         sum([01]) AS '01',
         sum([02]) AS '02',
         sum(Total) AS Total
FROM     #aa
GROUP BY GROUPING SETS((maingroup, subgroup, subsubgroup, season, vendorid), ())

両方とも次のように返されます。

GROUPING SETSの結果

GROUPING SETS EquivalentsおよびUsing GROUP BY with ROLLUP, CUBE, and GROUPING SETSは、使用に関する優れた情報を提供する 2 つの追加情報源です。GROUPING SETS

于 2013-02-18T19:03:54.530 に答える
0
Select maingroup, subgroup, subsubgroup, season, vendorid, sum([01]) as '01', sum([02]) as '02', sum(Total)
FROM ##aa
Group by grouping sets ((maingroup, subgroup, subsubgroup, season, vendorid),())

最後のエントリは、01、02、および合計を除くすべての列が NULL の行になります。

于 2013-02-18T18:35:16.733 に答える