T-SQL 将间接相关的表组合成单个查询

T-SQL combine indirectly related tables into single query

我有一个名为“业务”的父级 table,有两个不同的 related/child table(分支机构和员工)与业务相关,但彼此没有直接联系。

我想要一个 SQL 查询,该查询将显示所有企业、分支机构和员工,每个员工都有一个行项目。例如,假设业务“B1”有 2 个关联公司(A1 和 A2)和两个员工(E1 和 E2),我想要一个查询结果类似于:

Business Affiliates Empl # Empl Name
B1 A1, A2 1 John
B1 A1, A2 2 Bob

我得到的最接近的输出如下所示:

Business Affiliates Empl # Empl Name
B1 A1 1 John
B1 A1 2 Bob
B1 A2 1 John
B1 A2 2 Bob

但如您所见,每个员工显示两次(每个附属公司一次)。

关于如何达到预期结果有什么建议吗?

使用 SQL 服务器 2017 及更高版本:

WITH existing as (

   -- your existing query goes here

) 
SELECT Business, string_agg(Affiliates, ',') as Affiliates,
     [Empl #], MAX([Empl Name]) As [Empl Name]
FROM existing
GROUP BY Business, [Empl #]

你可以做到这一点。

DECLARE @Sample TABLE ( business char(12), affiliates VARCHAR(25), empid int);

INSERT INTO @Sample VALUES
    ( 'B1', 'A1', 50 ),
    ( 'B1', 'A1', 80 ),
    ( 'B1', 'A2', 90 ),
    ( 'B1', 'A2', 50 );
    
SELECT  O.business,
        STUFF( (SELECT DISTINCT ', ' + CAST(affiliates AS VARCHAR(25)) 
                FROM @Sample I WHERE I.business = O.business FOR XML PATH('')
                ), 1, 2, '')
FROM    @Sample O
GROUP BY O.business;

结果:

根据您的需要进行更改。