我有一个 PostalCode 的表,现在我想将所有数据移到单行中,比如给第二个表
PostalId Country StateId DistrictId
-------- ------- ------- ----------
110051 1 110 10165
第二张表
RowNo Value
----- -----
1 110051
2 1
3 110
4 10165
答案 0 :(得分:2)
您可以使用
执行此操作SELECT V.RowNo,
V.Value
FROM PostalCode
CROSS APPLY (VALUES (1, PostalId),
(2, Country),
(3, StateId),
(4, DistrictId) )V(RowNo, Value);
答案 1 :(得分:1)
请使用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
答案 2 :(得分:0)
你可以使用它。
SELECT ROW_NUMBER() OVER(ORDER BY RowNo) RowNo, Value
FROM PostalCode UNPIVOT( Value FOR
RowNo IN ([PostalId], [Country], [StateId], [DistrictId] ) ) UNPVT