2012-03-19 33 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