簡體   English   中英

SQL查詢,將左外連接的結果分組到主表的單個單元格/字段

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

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