2012-08-11 31 views
1

我一直在寻找一种方法来显示多行,一个单元格中的一列。它的内容用逗号分隔。在SQL Server中将列分组为多行和Group_concate如MySQL

例如,在代替:

 
ProjectID Name     count 
------------------------------------- 
    2  Technical Services 31 
    1  Security Services  32 
    7  Technical Services 32 

我想我的查询的结果是这样的:

 
Name     Label 
--------------------------- 
Technical Services 31,2 
Technical Services 32,7 
Security Services 32,1 

我也希望我的查询的结果看起来像这样(就像在MySQL Group_Concate

 
Name     Label 
------------------------------- 
Security Services 32,1 
Technical Services 31,2: 32,7 
+0

PLZ格式化。它很难理解你在找什么 – sundar 2012-08-11 07:09:23

回答

1
如果你想组由 Name(喜欢的东西在MySQL Group_Concate

SELECT Name, 
CAST(count AS VARCHAR(10)) + ',' + CAST(ProjectID AS VARCHAR(10)) 
AS Label FROM table1 

结果

 
NAME     LABEL 
---------------------------- 
Security Services  32,1 
Technical Services  32,7 
Technical Services  31,2 

See this SQLFiddle

有没有为它的任何方法在SQL服务器:

试试这个。这只是它背后的逻辑。
那么试试这个:

SELECT * FROM (
    SELECT DISTINCT Name 
    FROM table1 
    ) table2 
CROSS APPLY 
    (SELECT CASE ROW_NUMBER() 
     OVER(ORDER BY ProjectId) 
     WHEN 1 THEN '' ELSE ': ' END + 
     (CAST(table3.count AS VARCHAR(10)) + ',' 
     + CAST(table3.ProjectID AS VARCHAR(10))) 
    FROM table1 table3 
    WHERE table3.Name = table2.Name 
    ORDER BY ProjectID 
    FOR XML PATH ('') 
    ) table3(Label) 

那么结果将是正确

 
NAME     LABEL 
-------------------------------- 
Security Services  32,1 
Technical Services 31,2: 32,7 

See this SQLFiddle

+0

非常感谢兄弟,但我想查看为 – user960439 2012-08-11 08:23:49

+0

感谢兄弟的工作.....但我想查看lyk这个名称LABEL --------- ------------------- 安全服务32,技术服务32,7:31,2 – user960439 2012-08-11 08:24:28

+0

@ user960439再次看到我的答案 – hims056 2012-08-11 09:14:45

0
select Name, 
     cast(count as varchar(5))+','+cast(ProjectID as varchar(5)) as label 
from <table>