繁体   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