2016-11-17 57 views
1

分組我有一個表在SQL Server 2008中是這樣的:怎麼看實際值,而通過的,而不是計在SQL

Id Name 
------------ 
1 Jack 
2 John 
3 Maria 
4 Jack 
5 Jack 
6 John 

我想看到一列具有相同名稱的所有ID 。

select Count(Id), Name 
from myTable 
group by Name 

上面的查詢給了我具有相同名稱的ID的數量。但我想看到的是:

Id Name 
    ------------ 
    1,4,5 Jack 
    2,6 John 
    3  Maria 

我該如何提供這個?由於

+0

這是一個SQL反模式;一個字段不應包含多個值。如果你解釋爲什麼你需要這個,它將如何使用,我們可能會提供一個替代模式/解決方案。 – MatBailie

+0

@xQbert'ListAgg()'只在Oracle中。 – RBarryYoung

+2

MSFT等同於'ListAgg()'是你正在尋找的函數:使用'for XML path'&'stuff' http://stackoverflow.com/questions/15477743/listagg-in-sqlserver – xQbert

回答

2
Declare @YourTable table (ID int, Name varchar(50)) 
Insert Into @YourTable values 
(1,'Jack'), 
(2,'John'), 
(3,'Maria'), 
(4,'Jack'), 
(5,'Jack'), 
(6,'John') 

Select Name 
     ,IDs = Stuff((Select Distinct ','+cast(ID as varchar(25)) 
        From @YourTable 
        Where Name=A.Name 
        For XML Path ('')),1,1,'') 
From (Select Distinct Name From @YourTable) A 

返回

Name IDs 
Jack 1,4,5 
John 2,6 
Maria 3 
+0

[** sql demo **](http://rextester.com/GBEIQ11323)...太慢了: –

+0

@JuanCarlosOropeza你還是試了一下,我恰好在爲我的國庫利率編寫一個字符串數組 –

+0

歡迎來到10k;) –

相關問題