use*_*897 7 sql-server pivot-table
由于我的应用程序的需要,我必须将查询的列名称作为第一行返回。现在我必须对这个结果进行 PIVOT,以便将其与我的结果集进行 UNION,但困难的部分是:它必须是动态的,因此如果我向该表添加新列,SELECT 会将所有名称进行透视。
以下 SELECT 为我带来了列名称:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Codes'
ORDER BY INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION
Run Code Online (Sandbox Code Playgroud)
我的结果集是:
COLUMN_NAME
Id
CodeName
Country
StartDate
EndDate
Run Code Online (Sandbox Code Playgroud)
我期望的是:
Id CodeName Country StartDate EndDate (... whatever other columns I might have)
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法可以做到这一点,而无需对列名称进行硬编码?
先感谢您!
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23528 次 |
| 最近记录: |