2012-06-20 36 views

回答

6
select min(ID) as ID, 
     Val, 
     stuff((select ','+Cat 
       from Table2 as T2 
       where T1.Val = T2.Val 
       for xml path(''), type).value('.', 'nvarchar(max)'), 1, 1, '') as Cat 
from Table2 as T1 
group by Val 
order by ID 

SQL Fiddle

+0

WOW。這很讓人佩服。它不需要我來解析它,但它可以工作,內聯,不需要clr,也不需要標量函數。現在我知道SQL小提琴。 Twofer! – GrayFox374

0
DECLARE @Table1 TABLE 
( 
id INT 
,Val VARCHAR(100) 
) 
DECLARE @Table2 TABLE 
(
id INT 
,Val VARCHAR(100) 
,Cat VARCHAR(100) 
) 

INSERT INTO @Table1 
VALUES(1,'XYZ') 

INSERT INTO @Table1 
VALUES(2,'abc') 

INSERT INTO @Table2 
VALUES(1,'XYZ','a') 

INSERT INTO @Table2 
VALUES(1,'abc','e') 

INSERT INTO @Table2 
VALUES(1,'XYZ','b') 

INSERT INTO @Table2 
VALUES(1,'XYZ','f') 

INSERT INTO @Table2 
VALUES(1,'abc','g') 


SELECT t1.id,t1.Val ,(SELECT STUFF((SELECT ',' + cat FROM @Table2 t2 WHERE t2.Val =     t1.val FOR XML PATH('')),1,1,'')) 
FROM @Table1 t1 
0

可以定義CLR用戶定義的聚合做到這一點。我發佈了這樣的解決方案的詳細描述,作爲對另一個問題的答案 - TSQL Comma Separation。在那裏你還可以找到一篇博客文章的鏈接,討論在開發CLR聚合時可能遇到的問題。

後您部署自定義彙總到服務器(我命名的函數Concat但你可以有不同的名稱),你將能夠獲得所需要的結果用下面的查詢:

SELECT Val, dbo.Concat(Cat) 
FROM Table2 
GROUP BY Val 
相關問題