SQL查询代码不运行动态

时间:2018-05-01 10:43:57

标签: sql database sql-server-2008-r2 ssms

我希望在动态表中具有顶部句点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

1 个答案:

答案 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来获取结果