用PIVOT创建一个表

时间:2017-06-30 15:17:36

标签: sql sql-server

我有一个旋转股票价格表的查询,但它使用临时表。

我想知道如何将这个旋转的表存储在表中。 我一直在努力将此查询用于'创建表格'因为有一些变量声明。

以下是代码:

IF OBJECT_ID('TEMPDB..#TEMP','U') IS NOT NULL DROP TABLE #TEMP;
DECLARE @COL NVARCHAR(MAX);
DECLARE @SQL NVARCHAR(MAX);
DECLARE @HEADER NVARCHAR(MAX);
DECLARE @FIX NVARCHAR(MAX);
DECLARE @VAR NVARCHAR(MAX);
DECLARE @ORDER NVARCHAR(MAX);
WITH
#TEMP AS(
select Cast(MarketDate as Date) as date_, oo.seccode, ConstFlag  
FROM 
(select distinct seccode, InfoCode, MarketDate, Constflag
from ds_russell1000_prices_adj_r) oo
SELECT * INTO #TEMP
FROM #TEMP
SET @FIX = 'Date_';
SET @VAR = 'Constflag'
SET @HEADER = 'seccode';
SELECT @COL = COALESCE(@COL + ',','') + QUOTENAME(seccode) FROM #TEMP F
GROUP BY QUOTENAME(seccode)
ORDER BY QUOTENAME(seccode)
SET @ORDER = 'Date_'
SET @SQL = 'SELECT  ' + @FIX + ',' + @COL + ' FROM (SELECT ' + @FIX + ',' +
VAR + ', ' + @HEADER + ' FROM #TEMP) P
PIVOT (sum(' + @VAR + ') FOR ' + @HEADER + ' in (' + @COL + ')) PVT
ORDER BY ' + @ORDER + ''
EXEC sp_executesql @SQL;

IF OBJECT_ID('ds_russell1000_positions_ROTATED') IS NOT NULL DROP TABLE
ds_russell1000_positions_ROTATED;
select * into ds_russell1000_positions_ROTATED
from #TEMP

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

而不是这一行:

SELECT * INTO #TEMP

只需将#TEMP替换为您要创建的永久表的名称。

同时取下CTE名称的#标志:

WITH
TEMP AS(
...
FROM TEMP

#符号用于命名临时表,不应在其他对象名中使用。