2009-11-23 46 views
0
ID   Name 
1   A 
1   B 
1   C 
2   X 
2   Y 
3   P 
3   Q 
3   R 

這些是表中的列。我想輸出像在T-SQL中不使用While或Cursor的情況下進行復制

ID Company 
    1 A,B,C 
    2 X, Y 
    3 P,Q,R 

限制是我不能使用WHILE或光標。請爲此寫一個查詢。

+3

什麼版本的SQL Server ??? – 2009-11-23 10:51:31

+0

你想把公司名稱作爲逗號分隔列表嗎?爲什麼? – mcintyre321 2009-11-23 10:58:56

回答

3

這個查詢應該這樣做 - 使用FOR XML PATH這是在SQL Server 2005中新的 - 希望你是2005以上,你沒有明確地指出.....

SELECT 
    ID, 
    STUFF(CAST((SELECT ','+Name FROM dbo.YourTable t2 
       WHERE t2.ID = dbo.YourTable.ID 
       FOR XML PATH(''), TYPE) AS VARCHAR(MAX)), 1, 1, '') AS 'Company' 
FROM 
    dbo.YourTable 
GROUP BY 
    ID 
1

對於2005版:

CREATE TABLE dbo.TEST([Type] INTEGER, [Name] NVARCHAR(100), [Qty] INTEGER) 
GO 
INSERT dbo.TEST VALUES(1, N'a', 5) 
INSERT dbo.TEST VALUES(1, N'b', 6) 
INSERT dbo.TEST VALUES(2, N'c', 44) 
INSERT dbo.TEST VALUES(3, N'd', 1) 
GO 

select [Type], 
[Description] = replace((select [Name] + ':' + cast([Qty] as varchar) as 'data()'  
from TEST where [Type] = t.[Type] for xml path('')), ' ', ',') 
from dbo.TEST t 
group by [Type] 

go 

drop table dbo.TEST 
2

下面是使用CROSS應用方法解決:

select id, sub.names 
from (
    select distinct id from YourTable 
) a 
cross apply (
    select name + ', ' as [text()] 
    from YourTable b 
    where b.id = a.id 
    for xml path('') 
) sub(names) 
0

您可以將上該ID以獲得獨特的價值觀,然後拿到逗號分隔字符串每次使用for xml查詢:

select 
    a.ID, 
    substring((
    select ', ' + Name 
    from Test1 
    where Test1.ID = a.ID 
    for xml path('') 
), 3, 1000) as Company 
from 
    TheTable a 
group by 
    a.ID 
相關問題