22,210
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE t1(bm varchar(5), bh1 varchar(5), bh2 varchar(5), rq datetime, num1 int,num2 int)
INSERT INTO t1
SELECT '1 ', '1 ', '1 ', '2007-01-01 ', 1, 1
UNION
SELECT '1 ', '1 ', '2 ', '2007-01-01 ', 2, 2
UNION
SELECT '1 ', '1 ', '1 ', '2007-01-02 ', 1, 1
UNION
SELECT '1 ', '1 ', '1 ', '2007-01-03 ', 1, 1
UNION
SELECT '1 ', '1 ', '2 ', '2007-01-03 ', 1, 1
UNION
SELECT '2 ', '1 ', '1 ', '2007-01-01 ', 1, 1
UNION
SELECT '2 ', '1 ', '1 ', '2007-01-02 ', 2, 2
UNION
SELECT '3 ', '1 ', '1 ', '2007-01-01 ', 1, 1
select
bm,bh1,count(distinct rq) as ts,sum(num1) as num1,sum(num2) as num2
from
t1
group by
bm,bh1
/*
bm bh1 ts num1 num2
----- ----- ----------- ----------- -----------
1 1 3 6 6
2 1 2 3 3
3 1 1 1 1
*/
drop table t1
select bm,
bh1,
datediff(day,min(rq),max(rq))+1 as ts,
sum(num1) as num1
from t1
group by bm,bh1
CREATE TABLE t1(bm varchar(5), bh1 varchar(5), bh2 varchar(5), rq datetime, num1 int,
num2 int) INSERT INTO t1
SELECT '1 ', '1 ', '1 ', '2007-01-01 ', 1, 1
UNION
SELECT '1 ', '1 ', '2 ', '2007-01-01 ', 2, 2
UNION
SELECT '1 ', '1 ', '1 ', '2007-01-02 ', 1, 1
UNION
SELECT '1 ', '1 ', '1 ', '2007-01-03 ', 1, 1
UNION
SELECT '1 ', '1 ', '2 ', '2007-01-03 ', 1, 1
UNION
SELECT '2 ', '1 ', '1 ', '2007-01-01 ', 1, 1
UNION
SELECT '2 ', '1 ', '1 ', '2007-01-02 ', 2, 2
UNION
SELECT '3 ', '1 ', '1 ', '2007-01-01 ', 1, 1
select
bm,bh1,count(distinct rq) as ts,sum(num1) as num1,sum(num2) as num2
from
t1
group by
bm,bh1
/*
bm bh1 ts num1 num2
----- ----- ----------- ----------- -----------
1 1 3 6 6
2 1 2 3 3
3 1 1 1 1
*/
drop table t1
select distinct a.bm,a.bh1,b.ts,b.num1,c.num2
from tf a,
(select bm,sum(num1)num1,count(distinct rq)ts from tf group by bm,bh1)b,
(select bm,sum(num2)[num2],sum(num3)[num3],sum(num4)[num4] from (select bm,max(num2)num2,max(num3)num3,max(num4)num4 from tf group by bm,bh1,rq)b group by bm)c
where a.bm=c.bm and b.bm=a.bm
----------------------
如果num3,num4,...都跟num2是一样计算的话,可以像上面那样继续加在后面。
select distinct a.bm,a.bh1,(select count(distinct rq) from tf where bm=a.bm group by bm,bh1)ts,
(select sum(num1) from tf where bm=a.bm group by bm,bh1)num1,
c.num2
from tf a,
(select bm,sum(num2)[num2] from (select bm,max(num2)[num2] from tf group by bm,bh1,rq)b group by bm)c
where a.bm=c.bm