Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql查询代码不动态运行_Sql_Database_Sql Server 2008 R2_Ssms - Fatal编程技术网

sql查询代码不动态运行

sql查询代码不动态运行,sql,database,sql-server-2008-r2,ssms,Sql,Database,Sql Server 2008 R2,Ssms,我想要在动态表中具有顶部周期YYYYMM的透视表布局。 显示每月的消费总额显示1年。 但是当我试着把数据(周期(201801201802…)放在动态上时,周期表不工作 我不知道我在报告上是否做错了什么……有人能帮忙吗 查询没有处于动态和工作状态,但当我尝试更改为动态时,无法使其工作 DECLARE @ColumnNames NVARCHAR(MAX) = ' ' DECLARE @SQL NVARCHAR (MAX) = ' ' SELECT @ColumnNames += QUOTENAM

我想要在动态表中具有顶部周期YYYYMM的透视表布局。 显示每月的消费总额显示1年。 但是当我试着把数据(周期(201801201802…)放在动态上时,周期表不工作

我不知道我在报告上是否做错了什么……有人能帮忙吗

查询没有处于动态和工作状态,但当我尝试更改为动态时,无法使其工作

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

您正在执行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
编辑
在过去的
EXEC
中添加了
OUT
以识别它们是输出变量,因此您可以使用
SELECT@TransType
获得结果

动态SQL使用字符串中定义的SQL上的
EXEC sp_executesql
。我不确定你的代码应该做什么。我希望报告显示如下:| item | group | name | Stock | 201804 | 201803 | 201802 | 201801 |……(期间应该是dynamici运行查询并成功运行,但不显示任何数据,只显示“Command(s)completed successfully.”嗯,我想知道您的第一个查询是否会返回任何列,您可以尝试并自行执行第一部分,以查看-如果没有返回任何内容,那么您需要了解如何将列转换为列表,以便在
in子句中使用
,这可能会使您的方向正确-选择*FROM(选择句点;[No],[Group],[Lakeview],[Name],[class.],[STOKVIS LIVE],[dbo],[SR_CONS_consumption 1year])中[Period]的枢轴(总和([Qty])([201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[201,[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、[201805]、)如pivortable@Justin所示,当我运行时,仅显示1个月的报告重复收集每个项目的年份