これはおかしく聞こえるかもしれませんし、おそらくこの方法で行うべきではありませんが、このようなものが必要です-SELECT [Type], [Total Sales] From Before
のレコードがあります
テーブルの最後にSUMを表示するために、最後に余分な行を追加したい(後)。これはできますか?
SQL Server 2008以降のバージョンを使用している場合は、 ROLLUP()
GROUP BY関数を使用できます。
SELECT
Type = ISNULL(Type, 'Total'),
TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;
これは、Type
列にNULLを含めることはできないため、このクエリのNULLは総計のあるロールアップ行を示すことを前提としています。ただし、Type
列に独自のNULLを含めることができる場合、合計行に対するより適切なタイプのアカウンティングは@Declan_Kの答えのようになります。つまり、 GROUPING()
関数を使用します。
SELECT
Type = CASE GROUPING(Type) WHEN 1 THEN 'Total' ELSE Type END,
TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;
これは、SQL Server 2008+で使用するより強力なグループ化/ロールアップ構文です。推測する必要がないように、使用しているバージョンを指定すると常に便利です。
SELECT
[Type] = COALESCE([Type], 'Total'),
[Total Sales] = SUM([Total Sales])
FROM dbo.Before
GROUP BY GROUPING SETS(([Type]),());
Craig Freedmanは GROUPING SETS
を紹介する素晴らしいブログ投稿 を書きました。
以下のようにunion all
を使用してみてください
SELECT [Type], [Total Sales] From Before
union all
SELECT 'Total', Sum([Total Sales]) From Before
i-oneが提案するように、順序付けに問題がある場合は、これを試してください:
select [Type], [Total Sales]
from (SELECT [Type], [Total Sales], 0 [Key]
From Before
union all
SELECT 'Total', Sum([Total Sales]), 1 From Before) sq
order by [Key], Type
ROLLUP 演算子を使用できます
SELECT CASE
WHEN (GROUPING([Type]) = 1) THEN 'Total'
ELSE [Type] END AS [TYPE]
,SUM([Total Sales]) as Total_Sales
From Before
GROUP BY
[Type] WITH ROLLUP