2008年7月22日 星期二

SQL 多欄位合併成一個欄位的作法

declare @list nvarchar(max)
,@last bigint
set @list = ''
set @last = -1

-- 暫存所有查詢結果
create table #tmp_filelist(tmp_1 bigint, tmp_list nvarchar(max))

-- 暫存所有中間執行過程
create table #tmp_file(tmp_1 bigint,tmp_value nvarchar(60), list nvarchar(max))

--將需要的資料儲存在#tmp_file
insert into #tmp_file(tmp_1, tmp_value, list)
SELECT 資料來源
ORDER BY

--處理暫存表的list資料,利用@last來判斷是否要合併(重點:與前一筆資料作比對)
update #tmp_file set @list = list = (CASE WHEN @last <> tmp_1 THEN tmp_value ELSE @list + ',' + tmp_value END), @last =tmp_1

-- 將結果儲存在#tmp_filelist
insert into #tmp_filelist(tmp_1,tmp_list)
select tmp_1, max(list) from #tmp_file group by tmp_1

drop table #tmp_filelist
drop table #tmp_file


感謝Lillian的指導

沒有留言: