当前位置:首页 > 数据库 > Sqlserver

SQL Server 联表字段合并查询

基于子表查询 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 联表字段合并查询

标签:

本文系统来源:http://www.cnblogs.com/i0air/p/4607948.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐