SQL Server 2008 に 2 つのテーブルがあります。
Definitions(ID, XML)
Data(DataID, DefinitionID, COL1, COL2, ..)
XML は次のようになります。
<definition>
<field columnname="COL1" fieldname="FirstName" />
<field columnname="COL2" fieldname="Surname" />
</definition>
私が必要とするのは次のようなものです:
DataID, Surname, FirstName
1 Adams Adam
2 Llama John
3 Kenny Lorna
クロス適用を使用してxmlから列を取得し、ピボットを解除してデータテーブルからデータを取得しようとしていましたが、それらをマージすることはできません...これには適切な方法がありますか?
私が試していたこと:
select distinct
Ids.Id.value('@columnname', 'nvarchar(50)') as ide,
Ids.Id.value('@fieldname', 'nvarchar(50)') as name
from Definitions
cross apply Xml.nodes('//field') as Ids(id)
と:
select col, value from
(SELECT COL1, COL2 FROM Data) d
UNPIVOT
(value for col IN (COL1, COL2)) AS newdata
;