我无法转动以下内容
FirstName LastName
----------------------
Talyor Swift
Bruno Mars
以下
ColumnName ColumnValue
--------------------------
FirstName Talyor
LastName Swift
FirstName Bruno
LastName Mars
我没有任何线索如何在没有硬编码的情况下启动它,尤其是从系统中检索列名的方法。
**未给出源表中的列名
答案 0 :(得分:1)
这是一种通过XML实现的“动态”方法。
显然UNPIVOT会更高效
示例强>
Select C.*
,ColumnOrder = D.ORDINAL_POSITION
From YourTable A
Cross Apply (Select XMLData = cast((Select A.* for XML Raw) as xml) ) B
Cross Apply (
Select Item = attr.value('local-name(.)','varchar(100)')
,Value = attr.value('.','varchar(max)')
From B.XMLData.nodes('/row') as n(r)
Cross Apply n.r.nodes('./@*') AS B(attr)
) C
Join INFORMATION_SCHEMA.COLUMNS D on D.Table_Name='YourTable' and D.Column_Name=C.Item
<强>返回强>
Item Value ColumnOrder
FirstName Talyor 1
LastName Swift 2
FirstName Bruno 1
LastName Mars 2
编辑 - 动态UnPivot
Declare @SQL varchar(max) ='
Select ColumnOrder = D.ORDINAL_POSITION
,Item
,Value
From YourTable
UnPivot (Value for Item in ('+Stuff((Select ',' +QuoteName(Name)
From sys.columns
Where objecT_id = OBJECT_ID('YourTable')
For XML Path ('')),1,1,'')
+')) as UnPiv
Join INFORMATION_SCHEMA.COLUMNS D on D.Table_Name=''YourTable'' and D.Column_Name=UnPiv.Item
'
--Print @SQL
Exec(@SQL)
答案 1 :(得分:-1)
从我在问题中看到的情况来看,这应该有效:
select 'firstname', firstname from table
union all
select 'lastname', lastname from table
如果列名称未知,您可以从sys.columns
表中选择它们,创建一个sql字符串并使用exec
函数来执行sql string。