この XML フラグメントを考えると (VIN は明らかに偽物です)
<VehicleFeed>
<Vehicle>
<VIN>1234</VIN>
<Equipment>
<EquipmentDesc>1.1</EquipmentDesc>
<EquipmentDesc>1.2</EquipmentDesc>
<EquipmentDesc>1.3</EquipmentDesc>
</Equipment>
</Vehicle>
<Vehicle>
<VIN>2345</VIN>
<Equipment>
<EquipmentDesc>2.1</EquipmentDesc>
<EquipmentDesc>2.2</EquipmentDesc>
<EquipmentDesc>2.3</EquipmentDesc>
</Equipment>
</Vehicle>
</VehicleFeed>
What I really want is this result set
VIN EquipmentDesc
--- -------------
1234 1.1
1234 1.2
1234 1.3
2345 2.1
2345 2.2
2345 2.3
@xdata という名前の var に xml データがあります。以下のコードは私がうまくいくと思っていたものですが、すべての機器の値を行に分割するのではなく、データの 1 つの列に連結しています。
select t.c.value('VIN[1]', 'varchar(20)') as VIN
, t1.c1.value('.', 'varchar(80)') as EquipDesc
from @xdata.nodes('//VehicleFeed/Vehicle') as t(c)
cross apply t.c.nodes('Equipment') as t1(c1)
つまり、私は得ています
VIN EquipmentDesc
--- -------------
1234 1.11.21.3
2345 2.12.22.3
おそらくクロス適用、または説明データの選択 (またはその両方) で、明らかに何か間違っていますが、それが何であるかはわかりません。これは簡単なように見えましたが、私はそれを見ていません。