我想在数据透视选择中选择一行,该选择使用db中的列名。
编辑:
SELECT *
FROM COR.PARAMETER_GROUP AS t WHERE GROUP_CODE = '555'
UNPIVOT
(
COLUMN_NAME
FOR VALUE IN(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'PARAMETER_GROUP' AND TABLE_SCHEMA='COR' ORDER BY ORDINAL_POSITION ASC)
) AS u
-
COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5
ROW 1 2 3 4 5
=
*COLUMN_NAME VALUE*
COLUMN1 1
COLUMN2 2
COLUMN3 3
COLUMN4 4
我基本上尝试这样做,但是我不能在FOR
中放入列名
答案 0 :(得分:2)
您在寻找这个吗?
CREATE TABLE #DataSource
(
[name] SYSNAME
,[pos] INT
);
INSERT INTO #DataSource ([name], [pos])
SELECT COLUMN_NAME
,ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE [TABLE_NAME] = 'PARAMETER_GROUP'
AND TABLE_SCHEMA='COR';
DECLARE @DynammicTSQLStatement NVARCHAR(MAX)
,@DynamicPIVOTColumns NVARCHAR(MAX);
SET @DynamicPIVOTColumns = STUFF
(
(
SELECT ',' + QUOTENAME([name])
FROM #DataSource
ORDER BY [pos]
FOR XML PATH('') ,TYPE
).value('.', 'NVARCHAR(MAX)')
,1
,1
,''
);
SET @DynammicTSQLStatement = N'
SELECT *
FROM #DataSource
PIVOT
(
MAX([pos]) FOR [name] IN (' + @DynamicPIVOTColumns + ')
) PVT';
EXEC sp_executesql @DynammicTSQLStatement;
DROP TABLE #DataSource;
我正在使用动态T-SQL语句来构建PIVOT
语句,以使其适用于每个表/视图。
答案 1 :(得分:1)
这是您的dynamic query
。
declare @cols nvarchar(max);
declare @sql nvarchar(1000);
select @cols =
STUFF((select N',' + QUOTENAME([COLUMN_NAME])
from (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'PARAMETER_GROUP' AND TABLE_SCHEMA='COR') t1
FOR XML PATH('')
), 1, 1, '') + N'';
set @sql = N'select ' + @cols + N' from
(
SELECT cast(ordinal_position as varchar(50)) as ordinal_position
, column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''PARAMETER_GROUP'' AND TABLE_SCHEMA=''COR''
) t1
pivot
(
max(t1.ordinal_position)
for t1.column_name in (' + @cols + N')
) p '
exec sp_executesql @sql;