Sql server SQL Server动态透视列名

Sql server SQL Server动态透视列名,sql-server,pivot-table,Sql Server,Pivot Table,出于应用程序的需要,我必须将查询的列名作为第一行返回。 现在我必须透视这个结果,以便将它与我的结果集合并,但困难的是:它必须是动态的,因此如果我向这个表中添加新列,SELECT将使所有名称透视 下面的选择为我提供了列名: SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Codes' ORDER BY INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION 我的结果集

出于应用程序的需要,我必须将查询的列名作为第一行返回。 现在我必须透视这个结果,以便将它与我的结果集合并,但困难的是:它必须是动态的,因此如果我向这个表中添加新列,SELECT将使所有名称透视

下面的选择为我提供了列名:

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)
没有硬编码列名的简单方法吗


提前谢谢你

最简单的方法是
声明一个变量
,并为列分配
逗号分隔符
。试试这个

DECLARE @col_list VARCHAR(max)=''

SELECT @col_list += '['+ COLUMN_NAME + '],'
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_NAME = 'Codes'
ORDER  BY INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION

SELECT @col_list = LEFT(@col_list, Len(@col_list) - 1)

SELECT @col_list 

从SQL Server 2017开始,这里有一个函数:STRING_AGG。 我在这里也使用了QUOTENAME函数,以便更容易地添加[]方括号

DECLARE @ColumnNames NVARCHAR(MAX);
SELECT @ColumnNames = STRING_AGG(QUOTENAME(COLUMN_NAME), ',')
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME='Codes';

您可以使用
stuff
part from this预期结果应该为每个“column\u name”都有一个单独的列名。首选的命名方案是什么?酷,这里不需要承诺是的,它现在正在工作。当你第一次在两列之间缺少逗号时,我想这应该是OP要求的。回答得好,谢谢。我想OP想要一个结果集,其中每个列名都包含在一个单独的列中。@Giorgosbetos我不明白,OP想要得到可以在pivot中动态生成列的列列表。在数据库中运行上面的查询,然后选中OK。我对OP有不同的解释。作为旁注,我没有否决你的回答。@Giorgosbetos-不,那很酷。我只是想跟你澄清一下
DECLARE @ColumnNames NVARCHAR(MAX);
SELECT @ColumnNames = STRING_AGG(QUOTENAME(COLUMN_NAME), ',')
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME='Codes';