2013-06-05 62 views
1

我有一個列的SQL Server數據庫表如下所示:SQL查詢組

表1

Id Name ErrorId 
1 AB  
2 CD  
3 AB 3 
4 AB 4 

我想要得到的輸出是這樣的:

Name IdCount ErrorIdCount ErrorIds 
AB  3   2   4,3 
CD  1   0   0 

我寫了一個目前看起來像這樣的查詢:

select Name, Count(Id) as IdCount, 
Count(Distinct case when ErrorId != ' ' then Id END) as ErrorIdCount 
from Table1 
group by Name; 

它給了我這樣的事情如下:

Name IdCount ErrorIdCount. 
AB  3  2 
CD  1  0 

我想不通我怎麼能包括ErrorIds過我的查詢? 任何人都可以指出我如何解決這個問題?

+0

作爲一個SqlSamurai,我原以爲你可以解決這個問題。 :)你是否嘗試過聲明一個遊標並逐行建立字符串?本質上你的問題是採用N行解決方案,並返回逗號分隔的字符串。 –

+0

是的,我知道。我考慮將我的名字改爲SqlBeginner ..但是這些名字已經被使用了。感謝您的解決方案,但:-) – CodeNinja

回答

2
Declare @a table (Id int, Name varchar(10),ErrorId int) 
insert into @a Values (1,'AB',null),(2,'CD',null),(3,'AB',3),(4,'AB',4); 


Select Name, Count(Id) as IdCount, 
Count(Distinct case when ErrorId != ' ' then Id END) as ErrorIdCount 
,[ErrorIds]= 
STUFF((SELECT ', ' + Cast(ErrorId as Varchar(10)) 
    FROM @a iup   
    WHERE iup.Name = a.Name 
    order by ErrorId 
    FOR XML PATH('')), 1, 1, '') 
from @a a 
Group by Name