SQL 查询以在单个输出上显示 many/many 关系?

SQL query to show many/many relationship on a single output?

我在一个 MS Sql 数据库中有 3 个 table,我试图通过查询将其加入到一个 table 中,以便我可以提取到 Excel.

我的 table 是 Person、Industry 和 PersonIndustry(连接 table)。

Person 有一个 personId,industry 有一个 industryid,PersonIndustry table 就是:

PersonID, IndustryID.

示例记录:

人物表:

1, John Smith
2, Bob Jones
3. Jill Jane

行业表:

1, Medical
2, Insurance
3, Construction

个人行业:

1,1
1,2
3,1

我想要的输出是:

人名、姓名、行业

1, John Smith, Medical:Insurance
2, Bob Jones, N/A
3. Jill Jane, Medical

我该怎么做?

由于您需要 Person table left join 中的所有行,另外两个 tables.

然后使用 for xml path 技巧在结果中对 concat 进行分组。试试这个。

;WITH cte
     AS (SELECT p.id,
                p.NAME AS p_name,
                i.NAME AS i_name
         FROM   person p
                LEFT JOIN PersonIndustry pin
                       ON p.id = pin.person_id
                LEFT JOIN Industry i
                       ON i.id = pin.indus_id)
SELECT id                                  AS P_id,
       p_name,
       Stuff((SELECT ',' + i_name
              FROM   cte b
              WHERE  a.id = b.id
              FOR xml path('')), 1, 1, '') AS i_name
FROM   cte a
GROUP  BY id,
          p_name