从透视结果创建表变量

时间:2017-02-16 16:39:24

标签: sql-server tsql

是否可以从数据结果创建表变量?

我的透视查询:

SELECT @QUERY = 'SELECT USER_KEY, ' + @COLDEPSUMMARY + '
                FROM CAUSDE_TAS                 
                PIVOT
                (
                SUM(USDE_HSU)
                FOR DEPA_KEY IN (' + @COLDEPARTMENTS + ')               
                ) PIVOT_LOCATIONS                   
                WHERE USDE_DAT >= ''' + format(@dDateFrom, 'MM.dd.yyyy') + ''' AND USDE_DAT <= ''' + format(@dDateTo, 'MM.dd.yyyy') + ''' 
                AND USER_KEY IN (' + @USERS_STR + ')
                GROUP BY USER_KEY'

@COLDEPSUMMARY和@COLDEPARTMENTS是动态生成的,看起来像这样(大约有70列):

@COLDEPSUMMARY:

SUM([120000003]),SUM([120000002]),SUM([140000001]),SUM([120000005]), ...

@COLDEPARTMENTS:

[120000003],[120000002],[140000001],[120000005], ...

我想从数据透视表创建表变量的主要原因是数据透视表中的列数是动态的 - 它可以变化,并且有很多列(大约70)。

更新

正如Jeremy建议我在动态查询中包含INTO #tmp,所以它看起来像这样:

SELECT @QUERY = 'SELECT USER_KEY, ' + @COLDEPSUMMARY + '
                INTO #tmp
                FROM CAUSDE_TAS                 
                PIVOT
                (
                SUM(USDE_HSU)
                FOR DEPA_KEY IN (' + @COLDEPARTMENTS + ')               
                ) PIVOT_LOCATIONS                   
                WHERE USDE_DAT >= ''' + format(@dDateFrom, 'MM.dd.yyyy') + ''' AND USDE_DAT <= ''' + format(@dDateTo, 'MM.dd.yyyy') + ''' 
                AND USER_KEY IN (' + @USERS_STR + ')
                GROUP BY USER_KEY'

如果我只使用EXECUTE(@query)运行查询,报告会说超过200行会受到影响。但是,查询:

select * from #tmp

正在回归:

  

无效的对象名称&#39;#tmp&#39;。

如果我提取动态查询并手动运行,一切都很好 - #tmp已创建,我可以查询它。 (我使用SELECT @query提取了查询。我只是将该选项复制粘贴到另一个窗口中。)

提取后的动态查询如下所示:

   SELECT USER_KEY, SUM([120000003]),SUM([120000002]),SUM([140000001])
   INTO #tmp
   FROM CAUSDE_TAS              
   PIVOT
   (
   SUM(USDE_HSU)
   FOR DEPA_KEY IN ([120000003],[120000002],[140000001])
   ) PIVOT_LOCATIONS                    
   WHERE USDE_DAT >= '09.19.2016' AND USDE_DAT <= '03.18.2017' 
   AND USER_KEY IN (100000002,100000004,100000006,100000008)
   GROUP BY USER_KEY

如果我只是运行#tmp,我不明白为什么EXECUTE(@Query)没有创建?

0 个答案:

没有答案