繁体   English   中英

连接表并在单行内连接多行

[英]Join tables and Concatenate Multiple Rows Within Single Row

连接多个表并将多行连接为一个以获得不同的部门名称。

我能够在表 EmpDepartment 上做到这一点,但我需要加入所有表。 预计 output 像这样。

需要查询

企业标识 企业名称 部门名称
1 一个 q,w,e
2 Null

ER图

SELECT
  p.EmpID,
  EmpName,
  STRING_AGG(DepartmentName,',') as DepartmentName
FROM
  EmpPayroll p
LEFT OUTER JOIN
  EmpDepartment e on e.EmpID=p.EmpID
LEFT OUTER JOIN 
  Department d on d.deptID=e.deptID
GROUP BY
  p.EmpID,
  EmpName

如果您使用的是 SQL Server 2017 或更高版本。 https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15

我根据你的要求更新了。

如果您使用的是 SQL Server 2017 及以上版本


SELECT ED.EmpId
      ,EP.EmpName
      ,STRING_AGG(D.DepartmentName,',') AS DepartmentName
FROM EmpPayroll EP 
  LEFT JOIN EmpDepartment ED
         ON EP.EmpId = ED.EmpId
  LEFT JOIN Department D 
         ON D.DeptId = ED.DeptId
Group By ED.EmpId, EP.EmpName

对于 SQL Server 2016 及以下版本

;WITH Partitioned AS
(
    
    SELECT EP.EmpId, EP.EmpName,D.DepartmentName,
        ROW_NUMBER() OVER (PARTITION BY ED.EmpId ORDER BY D.DepartmentName) AS NameNumber,
        COUNT(*) OVER (PARTITION BY ED.EmpId) AS NameCount  
    FROM EmpPayroll EP
    LEFT JOIN EmpDepartment  ED 
           ON EP.EmpId = ED.EmpId
    LEFT JOIN Department D 
           ON D.DeptId = ED.DeptId

),
Concatenated AS
(
    SELECT 
        EmpId, 
        CAST(DepartmentName AS nvarchar) AS DepartmentName, 
        EmpName, 
        NameNumber, 
        NameCount 
    FROM Partitioned 
    WHERE NameNumber = 1

    UNION ALL

    SELECT 
        P.EmpId, 
        CAST(P.DepartmentName + ', ' + C.DepartmentName AS nvarchar), 
        P.EmpName, 
        P.NameNumber, 
        P.NameCount
    FROM Partitioned AS P
        INNER JOIN Concatenated AS C 
                ON P.EmpId = C.EmpId 
                AND P.NameNumber = C.NameNumber + 1
)
SELECT 
    EmpId,
    EmpName,
    DepartmentName
FROM Concatenated
WHERE NameNumber = NameCount

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM