【发布时间】:2017-08-28 18:03:14
【问题描述】:
我一直在尝试使用动态列对大型数据库进行反透视,同时保留两个索引列。我无法将它保存为 SQL Server Management Studio 中的新表作为新表。现在我得到“一个 INSERT 语句不能包含一个将值分配给变量的 SELECT 语句。”
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
create table pivot_columns ([Prime Item Nbr] NVARCHAR(MAX), [Store Nbr] NVARCHAR(MAX))
insert into pivot_columns
select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(column_name)
FROM information_schema.columns
WHERE table_name = 'POSSalesMicro'
AND COLUMN_NAME <> 'Prime Item Nbr'
AND COLUMN_NAME <> 'Store Nbr'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
SELECT @query = 'WITH Unpivoted
AS
(
SELECT [Prime Item Nbr], [Store Nbr], columns, value
FROM POSSalesMicro
UNPIVOT
(
columns
FOR value IN('+ @cols + ')
) AS u
)
SELECT
[Prime Item Nbr],
[Store Nbr],
columns,
CAST(CASE WHEN value LIKE ''% POS Sales'' THEN REPLACE(value,''POS Sales'', '''')
WHEN value LIKE ''LR%'' THEN REPLACE(value,''LR '', '''')
END AS INT) AS WMWeek
FROM Unpivoted';
EXECUTE(@query);
【问题讨论】:
标签: sql-server dynamic unpivot