高效SQL 從無主鍵表中合併字段值

2021-04-15 13:57:29 字數 1059 閱讀 5487

create table #t1

(a varchar(10),

b varchar(20)

)insert into #t1 values ('aa','1')

insert into #t1 values ('aa','9a')

insert into #t1 values ('bb','1')

insert into #t1 values ('bb','10')

insert into #t1 values ('bb','16')

insert into #t1 values ('aa','16')

insert into #t1 values ('aa','17')

insert into #t1 values ('aa','30')

insert into #t1 values ('bb','6df') 

insert into #t1 values ('aa','5')

insert into #t1 values ('aa','8')

insert into #t1 values ('aa','ed')

所要的結果:

aa  1,9a,16,17,30,5,8,ed

bb  1,10,16,6df

解決方法:

declare @c varchar(1024)

set @c=''

declare @x char(10),@y char(10)

set @x=''

set @y=''

select @y=@x,@x=x.a,@c=@c + (case @x when @y then ',' else ';' + x.a + ':' end)

+x.d  from (select b as d,a from #t1)  as x order by x.a

set @c=substring(@c,2,len(@c)-1)

select @c

為什麼說是高效呢?

因為摒棄了游標和函式的途徑,而採用變數的方式來儲存值

也就是說避免了游標和函式自身的缺點

SQL 資料表給定欄位的多行記錄的合併

最近的報表中有個需求,使用者需要看到屬於某個客戶的order的所有的items,這些屬於某個order的items需要歸併為乙個字段記錄。首先是對兩個表的描述,乙個是orderhead,乙個是orderdetails,乙個客戶 debtor 有多個order,乙個order有乙個或多個item。or...

獲取MSSQL 表結構中字段的備註 主鍵等資訊

1 mssql2000 select 表名 case when a.colorder 1 then d.name else end,表說明 case when a.colorder 1 then isnull f.value,else end,字段序號 a.colorder,欄位名 a.name,標...

獲得sql表中對字段的描述文字

select 表名 case when a.colorder 1 then d.name else end,表說明 case when a.colorder 1 then isnull f.value,else end,字段序號 a.colorder,欄位名 a.name,標識 case when ...