[英]Total by Date in Pivot sql
我有這樣的curret查詢來創建數據透視表並計算項目
CREATE TABLE #SampleData ( Name varchar(10), Location varchar(20), Item varchar(10), Date varchar(8) ) INSERT INTO #SampleData VALUES ('Ron', 'Loc A', 'Pencil', '20170610'), ('Ron', 'Loc A', 'Pencil', '20170611'), ('Ron', 'Loc B', 'Pen', '20170610'), ('Ron', 'Loc B', 'Laptop', '20170611'), ('Tom', 'Loc A', 'Pencil', '20170611'), ('Tom', 'Loc B', 'Pencil', '20170610'), ('Tom', 'Loc B', 'Pen', '20170610'), ('Tom', 'Loc A', 'Pencil', '20170610'), ('Tom', 'Loc A', 'Laptop', '20170610'), ('Tom', 'Loc A', 'Pencil', '20170610') DECLARE @Pivot_Columns AS VARCHAR(MAX), @select_Columns VARCHAR(max) SELECT @Pivot_Columns = Stuff((SELECT DISTINCT ',' + Quotename(Item) FROM #SampleData FOR xml path('')), 1, 1, '') SELECT @select_Columns = Stuff((SELECT DISTINCT ',Sum(' + Quotename(Item) + ') as '+Quotename(Item) FROM #SampleData FOR xml path('')), 1, 1, '') DECLARE @SQL AS VARCHAR(MAX) SET @SQL = 'SELECT case when grouping(location) = 1 and grouping(name) = 0 then ''Total''+ '' '' + name when grouping(location) = 1 and grouping(name) = 1 then ''Total'' else name end Name, location, ' + @select_Columns + ' FROM ( SELECT name, location, item FROM #SampleData ) as PivotData PIVOT ( count(item) for item IN (' + @Pivot_Columns + ') ) AS PivotResult group by name,location with rollup ' EXEC(@SQL)
結果像這樣
如何在總計以下創建按日期總計?
我試圖使用工會,這是行不通的。 如何創建像我這樣的形象? 提前致謝。
不知道為什么要使用動態SQL。 試試這個靜態SQL:
SELECT case when grouping(location) = 1 and grouping(name) = 0 then 'Total'+ ' ' + name
when grouping(location) = 1 and grouping(name) = 1 then 'Total'
else name end Name, location, Sum([Laptop]) as [Laptop],Sum([Pen]) as [Pen],Sum([Pencil]) as [Pencil]
FROM
(
SELECT name, location, item
FROM #SampleData
) as PivotData
PIVOT
(
count(item)
for item IN ([Laptop],[Pen],[Pencil])
) AS PivotResult
group by name,location with rollup
UNION ALL
SELECT 'Total' Name, location, Sum([Laptop]) as [Laptop],Sum([Pen]) as [Pen],Sum([Pencil]) as [Pencil]
FROM
(
SELECT [date] as location, item
FROM #SampleData
) as PivotData
PIVOT
(
count(item)
for item IN ([Laptop],[Pen],[Pencil])
) AS PivotResult
group by location
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.