簡體   English   中英

在數據透視表中按日期總計

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM