2016-02-23 23 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

相關問題