[英]Merge values in a column (B) based on common values in column (A) in SQL table
問題:使用 SQL,您將如何根據列 (A) 中的常用值合並列 (B) 中的值?
表結構:我有一個 SQL 表(如下所示),其中A 列有 ID, B 列包含與 ID 相關的文本, C 列包含排名順序(應該對文本進行排序的順序)。
ID | 文本 | 排序 |
---|---|---|
ABC001 | ID: ABC001 - 最近的地標 - 購物中心 | -999 |
ABC001 | 從 SC 向北行駛 80 M | -900 |
ABC001 | 通過人行橫道 | 10.1 |
ABC002 | ID: ABC002 - 最近的地標 - 公共廁所 | -999 |
ABC002 | 從 SC 向北行駛 150 M | -900 |
ABC002 | 通過公園訪問路 | 10.1 |
ABC003 | ID: ABC003 - 最近的地標 - 康復中心 | -999 |
ABC003 | 從 RC 向西行駛 1300M | -900 |
ABC003 | 通過未制造的 RD | 10.1 |
ABC003 | 上鎖的大門 | 10.5 |
ABC003 | 呼叫 RC 訪問 | 20.1 |
預期的最終結果:結果表應如下所示:
ID | 文本 |
---|---|
ABC001 | ID: ABC001 - 最近的地標 - 購物中心 從 SC 向北行駛 80 M 通過人行橫道 |
ABC002 | ID: ABC002 - 最近的地標 - 公共廁所 從 SC 向北行駛 150 M 通過公園訪問路 |
ABC003 | ID: ABC003 - 最近的地標 - 康復中心 從 RC 向西行駛 1300M 通過未制造的 RD 上鎖的大門 呼叫 RC 訪問 |
在標准 SQL 中,您可以將其表示為:
select id,
listagg(text, '; ') within group (order by rank_order) as text
from t
group by id;
盡管大多數數據庫都支持此功能,但確切的語法取決於數據庫——插入換行符也是如此(這也可能取決於操作系統)。
謝謝 Gordon,LISTAGG 可以在 SQLServer 2016 及更高版本上運行,而我在 SQLServer 2012 上。但我發現STRING_AGG運行良好。 以下查詢是解決方案。
select ID, STRING_AGG(TEXT, CHAR(13)) within group (Order by RANK_ORDER) as TEXT
from t
GROUP BY ID
我無法在結果中獲得回車,它看起來像 SSMS 問題。
干杯, Ankit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.