读书人

请问复杂sql语句

发布时间: 2012-02-27 10:00:22 作者: rapoo

请教复杂sql语句
a dj sl je

101-1
101-1-1 1 1 0
101-1-2 2 1 0
101-1-1 1 1 0

102-1
102-1-1 3 1 0
102-1-2 4 1 0
102-1-3 5 1 0
.......

要结果如下
a sl je

101-1
101-1-1 2 2
101-1-2 1 2

102-1
102-1-1 1 3
102-1-2 1 4
102-1-3 1 5
.......

要求也就是:(1)把 101-1和102-1 的子的汇总
(2)把重复的 sl 加和 je 加和
这样子能写吗?非常感谢

[解决办法]

if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb
(
a varchar(20),
dj int,
sl int,
je int
)

insert into tb(a,dj,sl,je) values( '101-1 ', null,null,null)
insert into tb(a,dj,sl,je) values( '101-1-1 ',1, 1, 0)
insert into tb(a,dj,sl,je) values( '101-1-2 ',2, 1, 0)
insert into tb(a,dj,sl,je) values( '101-1-1 ',1, 1, 0)
insert into tb(a,dj,sl,je) values( '102-1 ', null,null,null)
insert into tb(a,dj,sl,je) values( '102-1-1 ',3, 1, 0)
insert into tb(a,dj,sl,je) values( '102-1-2 ',4, 1, 0)
insert into tb(a,dj,sl,je) values( '102-1-3 ',5, 1, 0)



select a,max(sl) as sl , max(je) as je from
(
select left(a,5) as a , sum(sl) as sl , sum(dj) as je from tb group by left(a,5)
union all
select left(a,7) as a , sum(sl) as sl , sum(dj) as je from tb group by left(a,7)
) t
group by a

drop table tb

/*
a sl je
-------------- ----------- -----------
101-1 3 4
101-1-1 2 2
101-1-2 1 2
102-1 3 12
102-1-1 1 3
102-1-2 1 4
102-1-3 1 5

(所影响的行数为 7 行)
*/

读书人网 >SQL Server

热点推荐