我有一組表在一個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