如何将动态列数行结果转换为垂直结果列表

时间:2015-05-29 17:02:39

标签: sql-server tsql

表中有一行数据,其中包含不同数量的列,名为C1,C2,C3 ..等。我可以找到该行,但我想将这些动态列数值取消转换为单列结果......我已经研究过很多关于pivot / unpivot的东西但是我发现的所有例子似乎都没有处理结果中的动态列数。

原生结果:

Col 1 Col 2 Col 3 Col 4 Col 5 .... Col X

Id名称DOB城市州

期望的结果:

ColumnNameTBD:

标识 名称 DOB 市 状态

谢谢!

2 个答案:

答案 0 :(得分:0)

在回答问题后,我能够将解决方案拼凑起来。我现在有办法自动地从动态/不一致结构中实现结构。

    DECLARE @sColumnNames As Varchar(5000)
    DECLARE @sSQL  AS  Varchar(5000);

    --Flatten List of Column Names
     Select @sColumnNames = ' ' + (
                 Select '(' + COLUMN_NAME + '),' As 'data()'
                  From  SMAR_STG.INFORMATION_SCHEMA.COLUMNS  With (NoLock) 
                 where TABLE_NAME = 'V_ETL_CTX_COREM_EXCEL_DTL_COLUMNS'
                   For XML PATH('')
            )  + ' '

    --Get Rid or trailing Comma
    Set @sColumnNames = substring(@Output,1,len(@Output) -1) 

    -- Assemble SQL Statement
    Set @sSQL = 'SELECT Upivot AS X
                FROM   SMAR_STG.DBO.V_ETL_CTX_COREM_EXCEL_DTL_COLUMNS
                       CROSS apply (VALUES '
    Set @sSql = @sSQL + @sColumnNames
    Set @sSQL = @sSQL + ') cs (upivot) '

    -- Execute
    EXEC (@sSql)

答案 1 :(得分:-2)

此项目已为resolved here

正如您将从链接中的文章中看到的,您将需要使用COALESCE函数来实现此