怎么把这样的数据按a,b,c列的顺序合并重复数据,并下一列以上一列为条件,生成合并后的新数据
如何把这样的数据按a,b,c列的顺序合并重复数据,并下一列以上一列为条件,生成合并后的新数据
如何把这样的数据按a,b,c列的顺序合并重复数据,并下一列以上一列为条件,生成合并后的新数据,如?:
A B C
111 a a1
a2
bbb b1
b2
11111 cc cc
222 22 2
21
333 1 1
------解决方案--------------------
ID A B C
1 111 a a1
2 111 a a2
3 111 bbb b1
4 111 bbb b2
5 111 bbb b2
6 11111 cc cc
7 11111 cc cc
8 222 22 2
9 222 22 21
10 333 1 1
如何把这样的数据按a,b,c列的顺序合并重复数据,并下一列以上一列为条件,生成合并后的新数据,如?:
A B C
111 a a1
a2
bbb b1
b2
11111 cc cc
222 22 2
21
333 1 1
------解决方案--------------------
--sql2012
ID A B C
1 111 a a1
2 111 a a2
3 111 bbb b1
4 111 bbb b2
5 111 bbb b2
6 11111 cc cc
7 11111 cc cc
8 222 22 2
9 222 22 21
10 333 1 1
--创建表#a
create table #a
(
id int identity not null,
a smallint,
b varchar(20),
c varchar(20)
)
--插入数据
insert into #a (a,b,c)
values(111,'a','a1'),
(111,'a','a2'),
(111,'bbb','b1'),
(111,'bbb','b2'),
(111,'bbb','b2'),
(11111,'cc','cc'),
(11111,'cc','cc'),
(222,'22','2'),
(222,'22','21'),
(333,'1','1')
select * from #a
--结果展示
/*
id a b c
----------- ------ -------------------- --------------------
1 111 a a1
2 111 a a2
3 111 bbb b1
4 111 bbb b2
5 111 bbb b2
6 11111 cc cc
7 11111 cc cc
8 222 22 2
9 222 22 21
10 333 1 1
(10 行受影响)
*/
--解决方案
;with a as(
select a,b,c,row_number() over(partition by a,b order by c)as rn
from (select distinct a,b,c from #a) as a
)
select replace(case when rn =1 then a when rn >1 then ' ' else '' end ,0,'') ) as a,
replace(case when rn =1 then b when rn >1 then ' ' else '' end ,0,'')) as b,