澳门金沙vip(转)SQL 合并列值

复制代码 代码如下: CREATE TABLE
tb(standards varchar(50State of Qatar, amount varchar(50卡塔尔, variation
varchar(50卡塔尔国,statuss varchar(50卡塔尔,Reason varchar(50卡塔尔(قطر‎卡塔尔 insert into tb
values(’55’,’279′,’4′,’物量积压’,’加工职员配备不足;T排制作进度相当的慢;’卡塔尔insert into tb values(’55’,’279′,’4′,’物量积压’,’构件人士不足;’卡塔尔国 insert
into tb values(’55’,’279′,’4′,’物量积压’,’跨间场所积压;图纸难题超级多;’卡塔尔(قطر‎insert into tb values(’56’,’300′,’4′,’物量积压’,’AAAA;’卡塔尔 insert into tb
values(’56’,’300′,’4′,’物量积压’,’BBBB;’卡塔尔 insert into tb
values(’56’,’300′,’4′,’物量积压’,’CCCC;’卡塔尔国 create function
test(@standards varchar(100卡塔尔国卡塔尔(قطر‎ returns varchar(8000卡塔尔国 as begin declare @re
varchar(500State of Qatar set @re = ” select @re = @re+’,’+Reason from tb where
@standards=standards return (stuff(@re,1,1,”卡塔尔(قطر‎State of Qatar end 调用 复制代码 代码如下: select distinct
standards,amount,variation,statuss,Reason = dbo.test(’55’卡塔尔(قطر‎ from tb where
standards=55 select distinct standards,amount,variation,statuss,Reason =
dbo.test(’56’卡塔尔(قطر‎ from tb where standards=56

— =============================================================================
— 標題: 合併列值
— 整理: takako_mu
— 时间: 2009-10-19
— 地点: 昆山
— =============================================================================
/*
表結構如下:
id    value 
—– —— 
1    aa 
1    bb 
2    aaa 
2    bbb 
2    ccc 

  1 –归并列值
  2 –原著:邹建
  3 –整编:爱新觉罗.毓华(十八年苦大仇深,守得冰山雪莲花开卡塔尔国  二〇〇五-12-16  江西蒙得维的亚
  4 
  5 –表布局,数据如下:
  6 /*
  7 id    value 
  8 —– —— 
  9 1    aa 
 10 1    bb 
 11 2    aaa 
 12 2    bbb 
 13 2    ccc 
 14 */
 15 –需求获得结果:
 16 /*
 17 id    values 
 18 —— ———– 
 19 1      aa,bb 
 20 2      aaa,bbb,ccc 
 21 即:group by id, 求value 的和(字符串相加)
 22 */
 23 –1. 旧的解决办法(在sql server 二零零四中不能不用函数解决。卡塔尔国 
 24 –1. 创造管理函数
 25 create table tb(id int, value varchar(10)) 
 26 insert into tb values(1, ‘aa’) 
 27 insert into tb values(1, ‘bb’) 
 28 insert into tb values(2, ‘aaa’) 
 29 insert into tb values(2, ‘bbb’) 
 30 insert into tb values(2, ‘ccc’) 
 31 go 
 32 
 33 create function dbo.f_str(@id int) 
 34 returns varchar(8000) 
 35 as 
 36 begin 
 37     declare @r varchar(8000) 
 38     set @r = ” 
 39     select @r = @r + ‘,’ + value from tb where id=@id 
 40     return stuff(@r, 1, 1, ”) 
 41 end 
 42 go 
 43 
 44 — 调用函数
 45 SELECt id, value = dbo.f_str(id) FROM tb GROUP BY id 
 46 
 47 drop table tb 
 48 drop function dbo.f_str 
 49 
 50 /* 
 51 id          value      
 52 ———– ———– 
 53 1          aa,bb 
 54 2          aaa,bbb,ccc 
 55 (所影响的行数为2 行)
 56 */ 
 57 
 58 –2、其余一种函数. 
 59 create table tb(id int, value varchar(10)) 
 60 insert into tb values(1, ‘aa’) 
 61 insert into tb values(1, ‘bb’) 
 62 insert into tb values(2, ‘aaa’) 
 63 insert into tb values(2, ‘bbb’) 
 64 insert into tb values(2, ‘ccc’) 
 65 go 
 66 
 67 –创制一个统一的函数
 68 create function f_hb(@id int) 
 69 returns varchar(8000) 
 70 as 
 71 begin 
 72   declare @str varchar(8000) 
 73   set @str = ” 
 74   select @str = @str + ‘,’ + cast(value as varchar) from tb where id = @id 
 75   set @str = right(@str , len(@str) – 1) 
 76   return(@str) 
 77 End 
 78 go 
 79 
 80 –调用自定义函数获得结果:
 81 select distinct id ,dbo.f_hb(id) as value from tb 
 82 
 83 drop table tb 
 84 drop function dbo.f_hb 
 85 
 86 /* 
 87 id          value      
 88 ———– ———– 
 89 1          aa,bb 
 90 2          aaa,bbb,ccc 
 91 (所影响的行数为2 行)
 92 */ 
 93 
 94 –2. 新的消除方式(在sql server 贰零零伍中用OUTELAND APPLY等消除。卡塔尔(قطر‎ 
 95 create table tb(id int, value varchar(10)) 
 96 insert into tb values(1, ‘aa’) 
 97 insert into tb values(1, ‘bb’) 
 98 insert into tb values(2, ‘aaa’) 
 99 insert into tb values(2, ‘bbb’) 
100 insert into tb values(2, ‘ccc’) 
101 go 
102 — 查询管理
103 select * from(select distinct id from tb)a outer apply( 
104         select [values]= stuff(replace(replace( 
105             ( 
106                 select value from tb n 
107                 where id = a.id 
108                 for xml auto 
109             ), ‘ <N value=”‘, ‘,’), ‘”/>’, ”), 1, 1, ”) 
110 )N 
111 drop table tb
112 
113 /* 
114 id          values 
115 ———– ———– 
116 1          aa,bb 
117 2          aaa,bbb,ccc 
118 
119 (2 行受影响卡塔尔 
120 */ 
121 
122 –SQL二〇〇六中的方法
123 create table tb(id int, value varchar(10)) 
124 insert into tb values(1, ‘aa’) 
125 insert into tb values(1, ‘bb’) 
126 insert into tb values(2, ‘aaa’) 
127 insert into tb values(2, ‘bbb’) 
128 insert into tb values(2, ‘ccc’) 
129 go 
130 
131 select id, [values]=stuff((select ‘,’+[value] from tb t where id=tb.id for xml path(”)), 1, 1, ”) 
132 from tb 
133 group by id 
134 
135 /* 
136 id          values 
137 ———– ——————– 
138 1          aa,bb 
139 2          aaa,bbb,ccc 
140 
141 (2 row(s) affected) 
142 
143 */ 
144 
145 drop table tb

結果如下:
id    values 
—— ———– 
1      aa,bb 
2      aaa,bbb,ccc 
*/