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或光標。請爲此寫一個查詢。
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或光標。請爲此寫一個查詢。
這個查詢應該這樣做 - 使用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
對於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
下面是使用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)
您可以將上該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
什麼版本的SQL Server ??? – 2009-11-23 10:51:31
你想把公司名稱作爲逗號分隔列表嗎?爲什麼? – mcintyre321 2009-11-23 10:58:56