Transpose / Pivot Table,不知道属性的数量或名称

时间:2014-05-07 11:09:04

标签: sql sql-server sql-server-2012 pivot transpose

我想将一个SQL表从一行转换为一列结果。该语句只返回一条记录,但在运行查询时,我不知道表中属性的名称。所有查询都知道是表和ID列,以返回相关记录。

即。我想将此作为一列结果返回:

SELECT * FROM ExampleTable WHERE (PKCol = 'XYZ'); 

这是我在SQL Server 2012中运行查询时所知道的唯一信息。

由于

1 个答案:

答案 0 :(得分:0)

您应该从sys.columns系统视图中检索列名,在游标中连接它们并使用UNPIVOT。

这样的事情:

    DECLARE @columns AS NVARCHAR(MAX) = '', @columns_char AS NVARCHAR(MAX) = '', @query AS NVARCHAR(MAX)

    SELECT @columns += ',' + c.name, @columns_char += ',CAST(' + c.name + ' AS VARCHAR(255)) AS ' + c.name   FROM sys.columns AS c WHERE c.object_id = OBJECT_ID(N'Your Table Name')
    SELECT @columns = STUFF(@columns, 1, 1, ''), @columns_char = STUFF(@columns_char, 1, 1, '')
    SELECT @columns, @columns_char  

    SET @query = 
    N'SELECT 
        column_name,
        col
    FROM
    (
        SELECT ' + @columns_char + ' FROM ' + Your_table_name + N' AS t
        WHERE t.id = ' + Your Id + N'
) AS sel
    UNPIVOT
    (
        col FOR column_name IN(' + @columns + ')
    ) AS upt';

    EXEC sp_executesql @query