我希望在动态表中具有顶部句点YYYYMM的数据透视表的布局。 显示每月消费总和显示1年。 但是,当我尝试将数据(期间(201801,201802 ...))与PERIOD表一起工作时,动态?!!
我不知道我是否在报告中做错了...任何人都可以帮忙吗?
查询没有动态和工作,但当我尝试更改为动态时,我无法使其正常工作。
DECLARE @ColumnNames NVARCHAR(MAX) = ' '
DECLARE @SQL NVARCHAR (MAX) = ' '
SELECT @ColumnNames += QUOTENAME(Period) + ','
FROM [STOKVIS LIVE].[dbo].[SR_CONS_Consumption1year]
SET @ColumnNames = LEFT (@ColumnNames,LEN(@ColumnNames)-1)
SET @SQL =
SELECT [No_] ,[Group],[Lakeview],[Name],[class.],[Stock], [Period]
FROM [STOKVIS LIVE].[dbo].[SR_CONS_Consumption1year]
PIVOT (
SUM ([Qty])
FOR [Period]
IN( ' + @ColumnNames + ')
)
as pivortable
答案 0 :(得分:0)
您正在执行2个需要动态语法的查询 - 我没有经过测试,但我认为您可以尝试这样的事情:
--Declare Variables
DECLARE @ColumnNames NVARCHAR(MAX) = NULL
DECLARE @SQL NVARCHAR(MAX)
-- First dynamic query
SET @SQL = N'
SELECT @ColumnNames += QUOTENAME(Period) + '',''
FROM [STOKVIS LIVE].[dbo].[SR_CONS_Consumption1year] ;';
--Execute dynamic query
EXEC sp_executesql @sql, N'@ColumnNames NVARCHAR(MAX)', @ColumnNames;
SET @ColumnNames = LEFT (@ColumnNames,LEN(@ColumnNames)-1)
--second dynamic query
SET @SQL = N'
SELECT [No_] ,[Group],[Lakeview],[Name],[class.],[Stock], [Period]
FROM [STOKVIS LIVE].[dbo].[SR_CONS_Consumption1year]
PIVOT (
SUM ([Qty])
FOR [Period]
IN( ' + @ColumnNames + ')
)
AS PivotTable ;';
EXEC sp_executesql @sql, N'@ColumnNames NVARCHAR(MAX) OUT', @ColumnNames OUT;
SELECT @TransType
修改强>
在过去OUT
中添加了EXEC
以确定它们是输出变量,因此您可以使用SELECT @TransType
来获取结果