简体   繁体   English

将动态数据透视表结果插入到Temp表中

[英]Inserting dynamic pivot Result into Temp table

I have the date and script below which calculate sales by item and year. 我有下面的日期和脚本,可以按项目和年份计算销售额。 It works fine But when I try to insert the result into temp table so that the temp table can be uses in another query. 它工作正常,但是当我尝试将结果插入到临时表中时,可以在另一个查询中使用该临时表。 I have the following error 我有以下错误

CREATE TABLE #TBL  (Dates DATE, [Year] INT, Amt MONEY,Item Varchar(100))
INSERT INTO #TBL VALUES 
('2018-06-01',2018,34,'Milk'),('2018-07-01',2018,99,'Rice'),('2018-08-01',2018,77,'Rice'),('2018-09-01',2018,26,'Rice'),
('2018-10-01',2018,75,'Orange'),('2018-11-01',2018,94,'Grapes'),('2018-12-01',2018,80,'Grapes'),('2019-01-01',2019,9,'Grapes'),
('2019-02-01',2019,52,'Milk'),('2019-03-01',2019,28,'Orange'),('2019-04-01',2019,61,'Orange'),('2019-05-01',2019,51,'Milk');

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME( Item) 
            FROM #TBL 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
 SET @query = 
      'SELECT 
       * 
       INTO #Final
       FROM (
     SELECT [Year],Amt ,Item
    FROM #TBL ) FG
    PIVOT
    (
    SUM(Amt) FOR Item IN ('+@cols+')
    ) pv'
EXEC(@query)
select * from #Final
 ;DROP TABLE #TBL

error Invalid object name '#Final'. 错误无效的对象名称“ #Final”。

Is it possible to insert data from dynamic pivot into a temp table 是否可以将数据从动态数据透视表插入到临时表中

您可以使用双#语法创建一个全局临时表:INTO ## Final,它将在动态sql之外具有作用域

Try this Query... 试试这个查询...

First Drop the #Final if exists.... 首先删除#Final(如果存在)...。

then create the #Final table... 然后创建#Final表...

then Perfrom your old Query.....will not give error Invalid object name '#Final'. 那么Perfrom您的旧查询.....不会给出错误无效的对象名称'#Final'。 this type of error 这类错误

CREATE TABLE #TBL  (Dates DATE, [Year] INT, Amt MONEY,Item Varchar(100))
INSERT INTO #TBL VALUES 
('2018-06-01',2018,34,'Milk'),('2018-07-01',2018,99,'Rice'),('2018-08-01',2018,77,'Rice'),('2018-09-01',2018,26,'Rice'),
('2018-10-01',2018,75,'Orange'),('2018-11-01',2018,94,'Grapes'),('2018-12-01',2018,80,'Grapes'),('2019-01-01',2019,9,'Grapes'),
('2019-02-01',2019,52,'Milk'),('2019-03-01',2019,28,'Orange'),('2019-04-01',2019,61,'Orange'),('2019-05-01',2019,51,'Milk');



IF OBJECT_ID('tempdb..#Final', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE #Final


CREATE TABLE #Final  ([Year] INT, Amt MONEY,Item Varchar(100))


DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME( Item) 
            FROM #TBL 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
 SET @query = 
      'SELECT 
       * 
       INTO #Final
       FROM (
     SELECT [Year],Amt ,Item
    FROM #TBL ) FG
    PIVOT
    (
    SUM(Amt) FOR Item IN ('+@cols+')
    ) pv'
EXEC(@query)
select * from #Final

DROP TABLE #TBL

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM