【问题标题】:sql query code dont run dynamicsql查询代码不运行动态
【发布时间】:2018-05-01 10:43:57
【问题描述】:

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

【问题讨论】:

  • 动态 SQL 在字符串中定义的 SQL 上使用exec sp_executesql。我不确定你的代码应该做什么。
  • 我希望报告显示如下:|item|组 |名称|股票|201804|201803|201802|201801|…(周期应该是动态的

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


【解决方案1】:

您正在执行 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 来获取结果

【讨论】:

  • 我运行查询并成功运行,但不显示任何数据,仅附带:“命令成功完成。”
  • 嗯,我想知道您的第一个查询是否带回任何列,您可以尝试自己执行第一部分来查看 - 如果没有返回,那么您需要弄清楚如何转换您的列到列表中以在 IN CLAUSE 中使用
  • 这可能会让你朝着正确的方向前进 - stackoverflow.com/questions/18702827/…
  • Select * FROM (SELECT Period ;[No_] ,[Group] ,[Lakeview] ,[Name] ,[class.] ,[Stock] FROM [STOKVIS LIVE].[dbo].[ SR_CONS_Consumption1year]) PIVOT ( SUM ([Qty]) FOR [Period] IN( [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],[201805],[201805],[201805],[201805],[201805],[201805],[201805],[ 201805],[201805],[201805],[201805],[201805],[201805],) 作为可枢转的@贾斯汀
  • 当我运行时只显示 1 个月,报告每年重复收集每个项目
猜你喜欢
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2020-06-27
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
相关资源
最近更新 更多