我有一组表在一个mssql 2012数据库。我怎样才能得到一个在包含逗号分隔的结果的另一个表中的两个mssql的查询结果两个连接删除
正如你可以看到有可以是一个应用程序记录多个appsys记录。还有appsys记录和开发语言记录之间的多对多关系。
我需要创建一个查询(在给定场景中不允许存储过程),我可以返回两列中的一个,它是tbl_apps表中的应用程序,然后是每个dev的串联逗号分隔值与与应用程序记录关联的每个appsys记录相关联的语言。
我有一组表在一个mssql 2012数据库。我怎样才能得到一个在包含逗号分隔的结果的另一个表中的两个mssql的查询结果两个连接删除
正如你可以看到有可以是一个应用程序记录多个appsys记录。还有appsys记录和开发语言记录之间的多对多关系。
我需要创建一个查询(在给定场景中不允许存储过程),我可以返回两列中的一个,它是tbl_apps表中的应用程序,然后是每个dev的串联逗号分隔值与与应用程序记录关联的每个appsys记录相关联的语言。
你可以尝试改编下面的代码,看它是否符合你的需求。你可能希望别名表,但我想我会让你出现明智的名字。
SELECT DISTINCT
app
, STUFF(
(SELECT ',' + dev_language
FROM
tbl_apps a
INNER JOIN tbl_appsys ON a.app_pk = tbl_appsys.app_pk
INNER JOIN tbl_appsys_dev_language ON tbl_appsys.appsys_pk = tbl_appsys_dev_language.appsys_pk
INNER JOIN tbl_dev_language ON tbl_appsys_dev_language.dev_language_pk = tbl_dev_language.dev_language_pk
WHERE a.app = tbl_apps.app
FOR XML PATH(''))
,1,1,'')
FROM
tbl_apps
INNER JOIN tbl_appsys ON tbl_apps.app_pk = tbl_appsys.app_pk
INNER JOIN tbl_appsys_dev_language ON tbl_appsys.appsys_pk = tbl_appsys_dev_language.appsys_pk
INNER JOIN tbl_dev_language ON tbl_appsys_dev_language.dev_language_pk = tbl_dev_language.dev_language_pk
巧合的是,使用同样的方法,这也是线程肖恩挂在评论上最upvoted答案的答案
你摇滚的人。这几乎是完美的。我做的一个改变是使内部选择语句不同以滤除重复结果。神奇! – Bastyon
的可能的复制[SQL Server中模拟组\ _concat MySQL的功能?] (http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-sql-server) –
如下所述,您的链接确实指出了一个很好的解决方案。对我而言,不幸的是,该线程没有显示在我的任何搜索结果中。感谢您帮助我指出一个好的结果。 – Bastyon