首页 > 解决方案 > 使用 column_names 创建一行数据透视选择

问题描述

我想让一行选择成为使用 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

标签: sqlsql-serverdatabasepivot

解决方案


您是否正在寻找这个:

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语句,以使其适用于每个表/视图。


推荐阅读