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
我在一个 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