表中有一行数据,其中包含不同数量的列,名为C1,C2,C3 ..等。我可以找到该行,但我想将这些动态列数值取消转换为单列结果......我已经研究过很多关于pivot / unpivot的东西但是我发现的所有例子似乎都没有处理结果中的动态列数。
原生结果:
Id名称DOB城市州
期望的结果:
标识 名称 DOB 市 状态
谢谢!
添
答案 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函数来实现此