[英]SQL Server 2008 pivoting table with unknown column name
我無法解決以下問題
FirstName LastName
----------------------
Talyor Swift
Bruno Mars
到以下
ColumnName ColumnValue
--------------------------
FirstName Talyor
LastName Swift
FirstName Bruno
LastName Mars
我不知道如何對它進行硬編碼,特別是從系統中檢索列名稱的方法時,如何啟動它。
**未提供源表中的列名
這是一種通過XML完成的“動態”方法。
顯然,聯波觀察團的表現將更好
例
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
編輯-動態取消旋轉
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)
從我在問題中看到的,這應該起作用:
select 'firstname', firstname from table
union all
select 'lastname', lastname from table
如果列名未知,則可以從sys.columns
表中選擇它們,創建一個sql字符串,然后使用exec
函數執行sql字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.