2016-02-23 21 views
0

我有一组表在一个mssql 2012数据库。我怎样才能得到一个在包含逗号分隔的结果的另一个表中的两个mssql的查询结果两个连接删除

enter image description here

正如你可以看到有可以是一个应用程序记录多个appsys记录。还有appsys记录和开发语言记录之间的多对多关系。

我需要创建一个查询(在给定场景中不允许存储过程),我可以返回两列中的一个,它是tbl_apps表中的应用程序,然后是每个dev的串联逗号分隔值与与应用程序记录关联的每个appsys记录相关联的语言。

+2

的可能的复制[SQL Server中模拟组\ _concat MySQL的功能?] (http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-sql-server) –

+0

如下所述,您的链接确实指出了一个很好的解决方案。对我而言,不幸的是,该线程没有显示在我的任何搜索结果中。感谢您帮助我指出一个好的结果。 – Bastyon

回答

1

你可以尝试改编下面的代码,看它是否符合你的需求。你可能希望别名表,但我想我会让你出现明智的名字。

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答案的答案

+0

你摇滚的人。这几乎是完美的。我做的一个改变是使内部选择语句不同以滤除重复结果。神奇! – Bastyon

相关问题