SQL Server 联表字段合并查询
时间:2021-07-01 10:21:17
帮助过:7人阅读
基于子表查询
SELECT
P.Name AS ‘省‘,
STUFF((
SELECT ‘,‘+Name
FROM dbo.市
WHERE Parent
=C.Parent
FOR XML PATH(
‘‘)),
1,
1,
‘‘)
AS ‘市‘
FROM dbo.市 C
LEFT JOIN dbo.省 P
ON C.Parent
= P.Code
GROUP BY C.Parent, P.Name
ORDER BY C.Parent
--基于父表查询
SELECT
P.Name AS ‘省‘,
XC.City AS ‘市‘
FROM dbo.省 P
LEFT JOIN(
SELECT
STUFF((
SELECT ‘,‘+Name
FROM dbo.市
WHERE Parent
=C.Parent
FOR XML PATH(
‘‘)),
1,
1,
‘‘)
AS ‘City‘,
Parent
FROM dbo.市 C
GROUP BY C.Parent
) XC ON P.Code
=XC.Parent
ORDER BY P.Code
这里有两种查询方式,基于子表会忽略没有下属城市的省记录,例如直辖市;而基于父表则会在子表集合列显示NULL值,两种情况分场景使用。
语法解释:
STUFF(‘STRING‘,1,1,‘‘)
根据MSDN帮助,可以了解到,这是一个字符串替换函数,将参数1的字符串,从参数2位置(数据库索引通常从1开始,而不是0)开始截取,截取长度为参数3,截取的部分替换为参数4。
SELECT STATEMENT FOR XML PATH(‘‘)
这里的 SELECT STATEMENT 是常规查询语句,结果为xml集合,因此可以包括二维数据表。
但构建此查询的目的是为了拼接一维的数据,因此这里的查询语句通常只查询一个字段,并在字段前使用分隔符。示例中使用的分隔符为中文逗号。
具体的FOR XML PATH语法可以参考MSDN。
转载请注明出自飞扬的尘埃的博客园。
SQL Server 联表字段合并查询
标签: