[英]Sql query , grouping result from left outer join to a single cell/field of main table
假設我有以下 3 個表:
IDUser Name Surname
1 Lucas Wurth
2 John Charson
3 Erik Drown
IDUser IDLocation
1 1
1 2
2 1
3 2
IDLocation Name
1 Rome
2 Milan
一個用戶表、一個位置表和一個用於為我們的用戶分配位置的表。 我想從我的數據庫中提取所有用戶,並有一個特定的列,其中報告所有分配的位置,如下所示:
IDUser Name Surname Locations
1 Lucas Wurth Rome - Milan
2 John Charson Rome
3 Erik Drown Milan
請注意,用戶 1 同時分配了 Rome & Milan
目前我的查詢:
SELECT
U.IDUser,
U.Name,
U.Surname,
UL.Name AS LocationName
FROM Users U
LEFT OUTER JOIN UserLocation UL ON
UL.IDUser = U.IDUser
LEFT OUTER JOIN Location L ON
UL.IDLocation = L.IDLocation
顯然總共返回 4 條記錄而不是 3 條記錄,是否可以使用聚合函數組來實現這一點? 如果是這樣,我應該怎么做?
如果您使用的是 SqlServer,則可以使用 STRING_AGG:
SELECT
U.IDUser,
U.Name,
U.Surname,
STRING_AGG(UL.Name, ' - ') AS Locations
FROM Users U
LEFT OUTER JOIN UserLocation UL
ON UL.IDUser = U.IDUser
LEFT OUTER JOIN Location L
ON UL.IDLocation = L.IDLocation
GROUP BY U.IDUser, U.Name, U.Surname
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.