原文:
SQL查詢語句 group by后, 字符串合并
合并列值 --******************************************************************************************* 表結構,數據如下: 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 /* id value ----------- ----------- 1 aa,bb 2 aaa,bbb,ccc (所影響的行數為 2 行) */ --=================================================================================== 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 /* id values ----------- ----------- 1 aa,bb 2 aaa,bbb,ccc (2 行受影響) */ -- 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 /* id values ----------- -------------------- 1 aa,bb 2 aaa,bbb,ccc (2 row(s) affected) */
?
demo:
select BeginCity,EndCity,FanDian, [ CangWei ] = stuff (( select ' / ' + [ CangWei ] from test1 t where t.BeginCity = Test1.BeginCity and t.EndCity = Test1.EndCity and t.FanDian = Test1.FanDian for xml path( '' )), 1 , 1 , '' ) from Test1 group by BeginCity,EndCity,FanDian
?
參考: ?http://bbs.csdn.net/topics/330188225
? ? ? ? ??http://bbs.csdn.net/topics/330182340
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
