【问题标题】:Transpose/Pivot Table without knowing the number or names of attributes在不知道属性数量或名称的情况下转置/数据透视表
【发布时间】:2014-05-07 11:09:03
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • 尝试搜索动态轴
  • @AK47 我看过,但他们似乎都知道在运行枢轴之前的属性名称?谢谢。
  • 所以您说的是,您不知道 PIVOT 之前表中的列数。正确吗?
  • @AK47 我只知道上面查询中的信息:Table and PK Column。
  • 我想这会对你有所帮助,stackoverflow.com/questions/21325394/…

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


【解决方案1】:

您应该从 sys.columns 系统视图中检索列名,将它们连接到 cusror 中并使用 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

【讨论】:

    猜你喜欢
    • 2016-05-19
    • 1970-01-01
    • 2013-05-10
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多