Pivot sql中按日期列出的总计

Pivot sql中按日期列出的总计,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有这样的curret查询来创建透视表并计算项目 创建表SampleData 名字是varchar10, 地点:varchar20, 项目10, 日期:varchar8 插入样本数据 价值观 ‘Ron’、‘Loc A’、‘Pencil’、‘20170610’, ‘Ron’、‘Loc A’、‘Pencil’、‘20170611’, ‘Ron’、‘Loc B’、‘Pen’、‘20170610’, “Ron”、“Loc B”、“笔记本电脑”、“20170611”, “汤姆”、“Loc A”、“铅笔”

我有这样的curret查询来创建透视表并计算项目

创建表SampleData 名字是varchar10, 地点:varchar20, 项目10, 日期:varchar8 插入样本数据 价值观 ‘Ron’、‘Loc A’、‘Pencil’、‘20170610’, ‘Ron’、‘Loc A’、‘Pencil’、‘20170611’, ‘Ron’、‘Loc B’、‘Pen’、‘20170610’, “Ron”、“Loc B”、“笔记本电脑”、“20170611”, “汤姆”、“Loc A”、“铅笔”、“20170611”, “汤姆”、“Loc B”、“铅笔”、“20170610”, “Tom”、“Loc B”、“Pen”、“20170610”, “汤姆”、“Loc A”、“铅笔”、“20170610”, “汤姆”、“Loc A”、“笔记本电脑”、“20170610”, “汤姆”、“Loc A”、“铅笔”、“20170610” 将@Pivot_列声明为VARCHARMAX, @选择\u列VARCHARmax 选择@Pivot_Columns=StuffSELECT DISTINCT',“+QuotenameItem FROM SampleData FOR xml path,1,1, 从xml路径1,1的SampleData中选择@SELECT_Columns=StuffSELECT DISTINCT',将“+QuotenameItem+”和“+QuotenameItem+”作为“+QuotenameItem, 将@SQL声明为VARCHARMAX 设置@SQL=”在groupinglocation=1和groupingname=0时选择大小写,然后选择Total++name 当groupinglocation=1且groupingname=1时,则为Total else名称结束名称、位置,' +@select_Columns+' 从…起 选择名称、位置、项目 从样本数据 作为数据透视 支点 计数项 对于' +@Pivot_Columns+' 结果 按名称、位置和汇总进行分组 '
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
;

谢谢你,我可以用动态sql改进你的答案,而且效果很好。我总是先使用静态sql。