快捷搜索:

SQL实例进阶-学习sql server2005 step by step(六)

SQL2005 使用XML合并聚合列

1.合并

在寻常的sql處理中,經常會碰着如下的情形,

有一個table T (id int, name varchar(10))

图片1

必要呈現的結果是,按照id相同的,把name值串起來,結果如下:

图片2

由於sql server并沒有供给字串的合并函數,以是必要特別處理,在SQL2000中,處理的要领一样平常有三種:cursor合并,function合并,臨時表合并。

A.Cursor合并:我們不提倡在通俗的sql statement中应用cursor,以是一样平常不考慮這種要领。

B.Function合并:這在SQL2000中,是最常用的要领。、

图片3

C.臨時表合并 :此種要领一样平常被应用在store procedure中,由於function本身的performance并不高,以是當碰到table數據較大年夜時,常采纳此種要领。

图片4

到了SQL2005 ,由於供给了outer apply 和對XML的优越支持,可以使用XML來簡單的處理合并字串的要领。

先來看一下,簡單的FOR XML出來的結果:

图片5

顯然上述結果是很吸惹人的,因為它將本來3條記錄的結果,合并成1條了。假如再將上面的字串結果,使用replace,stuff等sql供给的函數來處理一下,是不是更吸惹人呢?

图片6

上述結果,達到了合并字串的目的(只針對id=1), 接下來,就必要用到outer apply 來針對table里所有的id,一次整个合并name欄位了。

图片7

拆分:

代码

1 --SQL2000的例子

2 Create table T(name nvarchar(50),amount int)

3 insert into T

4select 'a,b,c' ,1

5 union allselect 'd,f',2

6 union allselect 'g',3

7 GO

8

9 SELECT

10SUBSTRING(A.name,B.number,CHARINDEX(',',A.name+',',B.number)-B.number)

您可能还会对下面的文章感兴趣: