簡體   English   中英

根據 SQL 表中 (A) 列中的常用值合並列 (B) 中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM