![](/img/trans.png)
[英]SQL Server : combine results from one column and then split into 2 columns
[英]SQL - Combine data from several columns into one column
我正在創建復雜的CTE查詢。 在MSSQL中
哪個結果會是這樣
| Id1 | Id2 | Id3 | | 1 | 2 | 3 | | 5 | 4 | 1 | | 6 | 5 | 2 |
現在我需要將所有數據合並到類似這樣的列中
| Ids | | 1 | | 2 | | 3 | | 5 | | 4 | | 1 | | 6 | | 5 | | 2 |
我想嘗試避免合並所有並按每列選擇
謝謝
我最喜歡的方法是使用cross apply
:
select v.id
from t cross apply
(values (t.id1), (t.id2), (t.id3)) v(id);
像使用unpivot
的版本一樣,它只讀取一次表。 使用union all
的版本將掃描表三次。 但是, cross apply
比unpivot
更強大,並且需要更少的鍵入。
AFAIK,除了使用UNION
操作外,沒有其他選擇。 UNION
操作的基本目的是僅...合並來自多個源/結果集的記錄。 所以你可以喜歡
select Id1 from tbl1
union
select Id3 from tbl1
union
select Id2 from tbl1
您可以使用UNPIVOT
SELECT Ids
FROM
(
SELECT Id1, Id2, Id3
FROM CTE
) d
UNPIVOT
(
Ids for id in (Id1, Id2, Id3)
) u
Use UNPIVOT table to get your result :
CREATE TABLE #table( Id1 INT ,Id2 INT , Id3 INT )
INSERT INTO #table( Id1 ,Id2 , Id3 )
SELECT 1 , 2 , 3 UNION ALL
SELECT 5 , 4 , 1 UNION ALL
SELECT 6 , 5 , 2
SELECT _Result [Result]
FROM
(
SELECT Id1 ,Id2 , Id3
FROM #table
)A
UNPIVOT
(
_Result FOR Id IN (Id1 , Id2 , Id3)
) UNPvt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.