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

时间:2015-01-09 01:13:26

标签: sql sql-server

我在MS Sql数据库中有3个表,我正在尝试将其连接到带有查询的单个表中,以便我可以提取到Excel中。

我的表是Person,Industry和PersonIndustry(连接表)。

人有一个人,行业有行业,而人工业表只是:

PersonID,IndustryID。

示例记录:

人员表:

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

行业表:

1, Medical
2, Insurance
3, Construction

PersonIndustry:

1,1
1,2
3,1

我想要的输出是:

Personid,名称,行业

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

我该怎么做?

1 个答案:

答案 0 :(得分:1)

由于您需要Personleft join中其他两个表的所有行。

然后使用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