我有这样的查询来创建数据透视表并计算项目
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)
和这样的结果
如何在总计下方创建总计日期?
我试图使用联盟,但它不起作用。 如何像我的形象一样创造总体? 提前谢谢。
答案 0 :(得分:0)
不确定您使用动态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
;