有POSTALCODE的表,現在我想將所有的數據單列像給第二臺我如何多列數據轉換成一行在SQL
PostalId Country StateId DistrictId
-------- ------- ------- ----------
110051 1 110 10165
二表
RowNo Value
----- -----
1 110051
2 1
3 110
4 10165
有POSTALCODE的表,現在我想將所有的數據單列像給第二臺我如何多列數據轉換成一行在SQL
PostalId Country StateId DistrictId
-------- ------- ------- ----------
110051 1 110 10165
二表
RowNo Value
----- -----
1 110051
2 1
3 110
4 10165
你可以做到這一點
SELECT V.RowNo,
V.Value
FROM PostalCode
CROSS APPLY (VALUES (1, PostalId),
(2, Country),
(3, StateId),
(4, DistrictId))V(RowNo, Value);
你可以使用這個。
SELECT ROW_NUMBER() OVER(ORDER BY RowNo) RowNo, Value
FROM PostalCode UNPIVOT(Value FOR
RowNo IN ([PostalId], [Country], [StateId], [DistrictId])) UNPVT
這將返回帶有'RowNo'字母順序('Country,DistrictId,PostalId,StateId')的結果 - 而不是命令說明('PostalId,Country,StateId,DistrictId') –
請嘗試另一種方式使用CROSS APPLY
與XML
方法來達到以上的結果:
SELECT ROW_NUMBER() OVER(ORDER BY
(
SELECT NULL
)) RowNo,
split.a.value('.', 'VARCHAR(MAX)') Value
FROM
(
SELECT CAST('<X>'+REPLACE(CONVERT(VARCHAR(MAX), PostalId)+','+CONVERT(VARCHAR(MAX), Country)+','+CONVERT(VARCHAR(MAX), StateId)+','+CONVERT(VARCHAR(MAX), DistrictId), ',', '</X><X>')+'</X>' AS XML) AS String
FROM PostalCode
) AS Z
CROSS APPLY String.nodes('/X') AS split(a);
結果:
RowNo Value
----- -----
1 110051
2 1
3 110
4 10165
'從 選擇RowNo,PostalId(選擇1爲RowNo ,PostalId作爲來自PostalCode的值 union all select 2,Country from PostalCode union all select 3,StateId from PostalCode union all select 4,DistrictId from PostalCode);' – L30n1d45