2012-03-19 39 views
0

如何從MSSQL 2005中的表中獲取以下輸出?如何獲取以下數據庫表方案的逗號分隔值

Input 
----- 

main_idn notice_id  group_name employer_name 
    1   20  State Client  Unknown 
    2   20  Canada Corp  Unknown 
    3   20  Unknown   Pacific Bell 
    4   30  State Client  Unknown 
    5   30  Reality Corp  Unknown 
    6   30  Unknown   Bell Labs 
    7   30  Unknown   AT&T 

Output 
------ 

notice_idn group_name         employer_name 
20   State Client,Canada Corp,Unknown    Unknown , Unknown , Pacific Labs 
30   State Client,Reality Corp.Unknown,Unknown  Unknown , Unknown , Bell Labs , AT&T 

在像MYSQL我可以編寫一個簡單的查詢:

從表中獲取notice_idn,GROUP_CONCAT(組名)的組名,GROUP_CONCAT(employer_name)爲EMP_NAME組由notice_idn

+0

搜索StackOverflow。類似的問題有很多答案。 – 2012-03-19 06:53:14

+0

我見過很多這樣的「重複」,但我無法關聯太多,因爲連接構造令我感到困惑。誰能告訴我一個解決方案? – Nishant 2012-03-19 07:21:28

回答

1

解決方案已經給出了我喜歡的here,但是請您嘗試下面的解決方案,雖然兩者都是同樣的解決方案,謝謝您的時間。

SELECT outerT.notice_idn, 

     STUFF(ISNULL((SELECT ', ' + innerT.group_name 
       FROM TargetTableName innerT 
       WHERE innerT.notice_id = outerT.notice_id 
      GROUP BY innerT.notice_id, innerT.group_name 
      FOR XML PATH (''), TYPE).value('.','VARCHAR(MAX)'), ''), 1, 1, '') group_name, 

     STUFF(ISNULL((SELECT ', ' + innerT.employer_name 
       FROM TargetTableName innerT 
       WHERE innerT.notice_id = outerT.notice_id 
      GROUP BY innerT.notice_id, innerT.employer_name 
      FOR XML PATH (''), TYPE).value('.','VARCHAR(MAX)'), ''), 1, 1, '') employer_name    

FROM TargetTableName outerT 
GROUP BY outerT.notice_id 
+0

非常感謝你。我是數據庫查詢的新手。我需要學習在這個解決方案中使用的想法 - 但是很完美。 – Nishant 2012-03-19 09:36:15

+0

你很受歡迎,只是繼續學習,繼續... – 2012-03-19 10:00:41