SQL Server动态数据透视表列名称 [英] SQL Server Dynamic Pivot Column Names

查看:86
本文介绍了SQL Server动态数据透视表列名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

出于应用程序的必要性,我必须将查询的列名作为第一行返回. 现在,我必须将该结果PIVOT以便与我的结果集实现UNION,但是困难的部分是:它必须是动态的,因此,如果我向该表中添加新列,则SELECT将使所有名称都经过透视处理.

For the necessity of my application, I must return the column names of a query as the very first row. Now I must PIVOT this result in order to UNION it with my result set, but the difficult part is: it must be dynamic, so if I ever add new columns to this table, the SELECT will bring all the names pivoted.

以下SELECT带给我列名:

The following SELECT brings me the Column names:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Codes'
ORDER BY INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION 

我的结果集是:

COLUMN_NAME
Id
CodeName
Country
StartDate
EndDate 

我期望的是:

Id    CodeName    Country    StartDate    EndDate (... whatever other columns I might have)

有没有一种简便的方法可以不对列名进行硬编码?

Is there any easy way to do that without hardcoding the column names?

提前谢谢!

推荐答案

DECLARE @cols NVARCHAR (MAX)

SELECT @cols = COALESCE (@cols + ',[' + COLUMN_NAME + ']', 
               '[' + COLUMN_NAME + ']')
               FROM    (SELECT DISTINCT COLUMN_NAME,INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION O 
               FROM INFORMATION_SCHEMA.COLUMNS
               WHERE TABLE_NAME = 'CODES') PV  
               ORDER BY O


DECLARE @query NVARCHAR(MAX)
SET @query = '           
              SELECT TOP 0 * FROM 
             (
                 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
                 WHERE TABLE_NAME = ''CODES''
             ) x
             PIVOT 
             (
                 MIN(COLUMN_NAME)
                 FOR [COLUMN_NAME] IN (' + @cols + ')
            ) p    

            '     
EXEC SP_EXECUTESQL @query

这篇关于SQL Server动态数据透视表列名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆