sql server2000 裡面如何?oracle10g的
wmsys.wm_concat() 的功能?
以及學習以下關鍵字:
一、行列轉換關鍵字PIVOT與UNPIVOT的使用
二、OUTER APPLY
三、FOR XML AUTO 、FOR XML
PATH
----烏龜代碼---
合并列值
--*******************************************************************************************
表結構,資料如下:
id
value
-----
------
1
aa
1
bb
2
aaa
2
bbb
2
ccc
需要得到結果:
id values
------
-----------
1
aa,bb
2
aaa,bbb,ccc
即:group by id, 求 value
的和(字串相加)
1. 舊的解決方案(在sql server
2000中只能用函數解決。)
--=============================================================================
create table tb(id int,
value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
--1. 建立處理函數
CREATE FUNCTION dbo.f_strUnite(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + value FROM tb WHERE id=@id
RETURN STUFF(@str, 1, 1, '')
END
GO
-- 調用函數
SELECt id,
value = dbo.f_strUnite(id) FROM tb GROUP BY id
drop table tb
drop function dbo.f_strUnite
go
--===================================================================================
2. 新的解決方案(在sql server 2005中用OUTER
APPLY等解決。)
create table tb(id int,
value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
-- 查詢處理
SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY(
SELECT [values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM tb
N
WHERE id = A.id
FOR XML AUTO
), ' <N value="', ','), '"/>', ''), 1, 1, '')
)N
drop table tb
--SQL2005中的方法2
create table tb(id int,
value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '')
from tb
group by id
drop table tb