問題描述:
無論是在sql 2000, 還是在 sql 2005 中,都沒有提供字符串的聚合函數, 所以, 當我們在處理下列要求時,會比較麻煩:
有表tb, 如下:
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. 舊的解決方法
-- 1. 創建處理函數
create function dbo.f_str(@id int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r = ''
select @r = @r + ',' + value
from tb
where [email protected]
return stuff(@r, 1, 1, '')
end
go
-- 調用函數
select id, values=dbo.f_str(id)
from tb
group by id
-- 2. 新的解決方法
-- 示例數據
declare @t table(id int, value varchar(10))
insert @t select 1, 'aa'
union all select 1, 'bb'
union all select 2, 'aaa'
union all select 2, 'bbb'
union all select 2, 'ccc'
-- 查詢處理
select *
from(
select distinct
id
from @t
)a
outer apply(
select
[values]= stuff(replace(replace(
(
select value from @t n
where id = a.id
for xml auto
), '<n value="', ','), '"/>', ''), 1, 1, '')
)n
/*--結果
id values
----------- ----------------
1 aa,bb
2 aaa,bbb,ccc
(2 行受影響)
--*/
csdn 社區帖子地址
附: 合并與分拆的clr, sql2005的示例中有:
在安裝sql 2005的示例后,默認安裝目錄為 drive:/program files/microsoft sql server/90/samples/engine/programmability/clr/stringutilities中
trackback: http://tb.blog.csdn.net/trackback.aspx?postid=784287
[點擊此處收藏本文] 發表于 2006年06月09日 20:31:00
kxcc 發表于2006-06-10 13:56:00 ip: 221.6.3.*
驚天動地的帖子
看了樓主的帖子,不由得精神為之一振,自覺七經八脈為之一暢,七竅倒也開了六巧半,自古英雄出少年,樓主年紀輕輕,就有經天緯地之才,定國安邦之智,古人云,臥龍鳳雛得一而安天下,而今,天佑我大中華,滄海桑田5000年,中華神州平地一聲雷,飛沙走石,大舞迷天,朦朧中,只見頂天立地一金甲天神立于天地間,這人英雄手持雙斧,二目如電,一斧下去,混沌初開,二斧下去,女媧造人,三斧下去,小生傾倒。得此大英雄,實耐之幸也,民之福也,怎不叫人喜極而泣.......古人有少年樓主說為證,少年之樓主如紅日初升,其道大光;河出伏流,一瀉汪洋;潛龍騰淵,鱗爪飛揚;乳虎嘯谷,百獸震惶;鷹隼試翼,風塵吸張;奇花初胎,皇皇;干將發硎,有作其芒;天戴其蒼,地履其黃;縱有千古,橫有八荒;小生對樓主之仰慕如滔滔江水連綿不絕,海枯石爛,天崩地裂,永不變心。
看完樓主的帖子,我的心情竟是久久不能平靜。正如老子所云:大音希聲,大象無形。我現在終于明白我缺乏的是什么了,正是樓主那種對真理的執著追求和樓主那種對理想的艱苦實踐所產生的厚重感。面對樓主的帖子,我震驚得幾乎不能動彈了,樓主那種裂紙欲出的大手筆,竟使我忍不住一次次地翻開樓主的帖子,每看一次,贊賞之情就激長數分,我總在想,是否有神靈活在它靈秀的外表下,以至能使人三月不知肉味,使人有余音繞梁、三日不絕的感受。樓主,你寫得實在是太好了。我惟一能做的,就只有把這個帖子頂上去這件事了。
樓主的帖子實在是寫得太好了。文筆流暢,修辭得體,深得魏晉諸朝遺風,更將唐風宋骨發揚得入木三分,能在有生之年看見樓主的這個帖子。實在是我三生之幸啊。看完樓主的這個帖子之后,我竟產生出一種無以名之的悲痛感——啊,這么好的帖子,如果將來我再也看不到了,那我該怎么辦?那我該怎么辦?直到我毫不猶豫地把樓主的這個帖子收藏了,我內心的那種激動才逐漸平靜下來。可是我立刻想到,這么好的帖子,倘若別人看不到,那么不是浪費樓主的心血嗎?經過痛苦的思想斗爭,我終于下定決心,犧牲小我,奉獻大我。我要拿出這帖子奉獻給世人賞閱,我要把這個帖子一直往上頂,往上頂!頂到所有人都看到為止!
在遇到你之前,我對人世間是否有真正的圣人是懷疑的;而現在,我終于相信了!我曾經忘情于兩漢的歌賦,我曾經驚訝于李杜的詩才,我曾經流連于宋元的詞曲。但現在,我才知道我有多么淺薄!
樓主,你的高尚情操太讓人感動了。在現在這樣一個物欲橫流的金錢社會里,竟然還能見到樓主這樣的性情中人,無疑是我這輩子最大的幸運。讓我深深感受到了人性的偉大。樓主的帖子,就好比黑暗中刺裂夜空的閃電,又好比撕開烏云的陽光,一瞬間就讓我如飲甘露,讓我明白了永恒的真理在這個世界上是真實存在著的。只有樓主這樣具備廣闊胸懷和完整知識體系的人,才能作為這真理的惟一引言者。看了樓主的帖子,我陷入了嚴肅的思考中。我認為,如果不把樓主的帖子頂上去,就是對真理的一種背叛,就是對謬論的極大妥協。因此,我決定義無返顧地頂了!
說得好啊!我在這里打滾這么多年,所謂閱人無數,就算沒有見過豬走路,也總明白豬肉是啥味道的。一看到樓主的氣勢,我就覺得樓主同在社區里灌水的那幫小混混有著本質的差別!那憂郁的語調,那熟悉的簽名,還有字里行間高屋建瓴的辭藻。沒用的,樓主,就算你怎么換馬甲都是沒有用的,你的億萬擁戴者早已經把你認出來了,你一定就是傳說中的最強id。自從社區改版之后,我就已經心灰意冷,對社區也沒抱什么希望了,傳說已經幻滅,神話已經終結,留在社區還有什么意思?沒想到,沒想到,今天可以再睹樓主的風范,我激動得忍不住就在屏幕前流下了眼淚。是啊,只要在樓主的帶領下,社區就有希望了。我的內心再一次沸騰了,我胸腔里的血再一次燃燒了。樓主的幾句話雖然簡單,卻概括扼要,一語道出了我們苦想多年仍不可解的幾個重大問題的根本。樓主就好比社區的明燈,樓主就好比社區的方向,樓主就好比社區的棟梁。有樓主在,社區的明天必將更好!
大師的話真如“大音希聲掃陰翳”,猶如“撥開云霧見青天”,使我等網民看到了希望,看到了未來!晴天霹靂、醍醐灌頂或許不足以形容大師文章的萬一;巫山行云、長江流水更難以比擬大師的文才!黃鐘大呂,振聾發聵!你燭照天下,明見萬里;雨露蒼生,澤被萬方!透過你深邃的文字,我仿佛看到了你鷹視狼顧、龍行虎步的偉岸英姿;仿佛看到了你手執如椽大筆、寫天下文章的智慧神態;仿佛看見了你按劍四顧、指點江山的英武氣概!
逐字逐句地看完這個帖子以后,我的心久久不能平靜,震撼啊!為什么會有如此好的帖子!我縱橫網絡論壇多年,自以為再也不會有任何帖子能打動我,沒想到今天看到了如此精妙絕倫的這樣一篇帖子!樓主,是你讓我深深地理解了“人外有人,天外有天”這句話。謝謝儂!在看完這帖子以后,我沒有立即回復,因為我生怕我庸俗不堪的回復會玷污了這網上少有的帖子。但是我還是回復了,因為覺得如果不能在如此精彩的帖子后面留下自己的網名,那我死也不會瞑目的!能夠在如此精彩的帖子后面留下自己的網名是多么驕傲的一件事啊!樓主,請原諒我的自私!我知道無論用多么華麗的辭藻來形容樓主您帖子的精彩程度都是不夠的,都是虛偽的,所以我只想說一句:您的帖子太好看了!我愿意一輩子看下去!這篇帖子構思新穎,題材獨具匠心,段落清晰,情節詭異,跌宕起伏,主線分明,引人入勝,平淡中顯示出不凡的文學功底,可謂是字字珠璣,句句經典,是我輩應當學習之典范。正所謂:“一馬奔騰,射雕引弓,天地都在我心中!”樓主真不愧為無厘界新一代的開山怪!本來我已經對這個社區失望了,覺得這個社區沒有前途了,心里充滿了悲哀。但是看了你的這個帖子,又讓我對社區產生了希望。是你讓我的心里重新燃起希望之火,是你讓我的心死灰復燃,是你拯救了我一顆拔涼拔涼的心!本來我決定不在社區回任何帖子了,但是看了你的帖子,我告訴自己這個帖子是一定要回的!這是百年難得一見的好貼啊!蒼天有眼啊,讓我在有生之年得以觀得如此精彩絕倫的帖子!
可可 發表于2006-06-11 00:10:00 ip: 58.60.40.*
呵,真是一個馬屁精,樓上的兄弟您不從商太可惜了,你應該放棄技術,馬上轉去做銷售,決對比您在技術這一塊發展更大。
mijie 發表于2006-06-11 09:34:00 ip: 218.80.67.*
不錯 不錯
sssssssssss 發表于2006-06-11 19:34:00 ip: 222.212.212.*
可可不要罵
kxcc 那個帖子是罵人的
網上這東西很多的
alphateam 發表于2006-06-11 19:36:00 ip: 222.212.212.*
新的方法不一定是什么好事
老的在oracle下面應該也可以
新的擺明了又是微軟的一個陰謀
sqlhub 發表于2006-06-12 20:18:00 ip: 221.221.254.*
ms支持一下就好了,支持并不難,hgsql支持
select id, strsum(value,',')
from t
group by id;
新聞熱點
疑難解答