select 设备id,进价,min(入库前库存数)入库前库存总数, sum(入库数)入库总数, max(入库后库存数)入库后库存总数 where 入库时间>=to_date('20091001','yyyymmdd') and 入库时间<to_date('20091101','yyyymmdd') group by 设备id,进价
select 设备id,进价,min(入库前库存数)入库前库存总数, sum(入库数)入库总数, max(入库后库存数)入库后库存总数 from tablename where 入库时间>=to_date('20091001','yyyymmdd') and 入库时间 <to_date('20091101','yyyymmdd') group by 设备id,进价
select 设备id,进价,min(入库前库存数)入库前库存总数, sum(入库数)入库总数, max(入库后库存数)入库后库存总数 from tt where 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd') group by 设备id,进价 union all select 设备id,进价,入库后库存数,0,入库后库存数 from tt t1 where 入库日期<to_date('20091001','yyyymmdd') and not exists(select 1 from tt where (入库日期<to_date('20091001','yyyymmdd') and 入库日期>t1.入库日期 or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd')) and 设备id=t1.设备id)
对进价有要求的话 and 设备id=t1.设备id 后面再加个 and 进价=t1.进价
select 设备id,进价,min(入库前库存数)入库前库存总数, sum(入库数)入库总数, max(入库后库存数)入库后库存总数 from tt where 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd') group by 设备id,进价 union all select 设备id,进价,入库后库存数,0,入库后库存数 from tt t1 where 入库日期<to_date('20091001','yyyymmdd') and not exists(select 1 from tt where (入库日期<to_date('20091001','yyyymmdd') and 入库日期>t1.入库日期 or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd')) and 设备id=t1.设备id)
狂浪兄,union all后面的sql貌似不符合C的情况设备ID 进价 入库日期 入库前库存数 入库数 入库后库存数 C 30.00 2009-9-28 5 1 6 C 30.00 2009-9-27 3 2 5 C 40.00 2009-9-26 0 3 3在“2009年10月的统计数量”的结果里需要体现 C 即: 设备ID 进价 入库前库存总数 入库总数 入库后库存总数 C 30.00 6 0 6 C 40.00 3 0 3
有体现c吧,只是7楼的代码不会体现进价会40的那条记录,你按8楼说的加个条件试试 union all后面的代码就是为了找出像你例子中c的这样的记录
哦,狂狼兄,你的Sql语句应该是正确的 union all 后面的sql 我不大明白,能不能解释一下,谢谢了
按你的要求,分两种情况,分别在union all前后的代码中体现 前面的代码是10月份的统计,这个应该没有问题 后面的代码是找出:10月份中没有对应记录的,在10月份以前找最后一条符合条件的记录,取出来像你的例子中c那样体现。 where 入库日期<to_date('20091001','yyyymmdd') and 入库日期>t1.入库日期 --在10月以前且时间大于取出的记录 or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd') --在10月之间找出符合2种情况的记录都不存在的记录
sum(入库数)入库总数,
max(入库后库存数)入库后库存总数
where 入库时间>=to_date('20091001','yyyymmdd')
and 入库时间<to_date('20091101','yyyymmdd')
group by 设备id,进价
sum(入库数)入库总数,
max(入库后库存数)入库后库存总数
from tablename
where 入库时间>=to_date('20091001','yyyymmdd')
and 入库时间 <to_date('20091101','yyyymmdd')
group by 设备id,进价
C 30.00 2009-9-28 5 1 6在“2009年10月的统计数量”的结果里需要体现 C即:
设备ID 进价 入库前库存总数 入库总数 入库后库存总数
C 30.00 6 0 6
sum(入库数)入库总数,
max(入库后库存数)入库后库存总数
from tt
where 入库日期>=to_date('20091001','yyyymmdd')
and 入库日期 <to_date('20091101','yyyymmdd')
group by 设备id,进价
union all select 设备id,进价,入库后库存数,0,入库后库存数 from tt t1
where 入库日期<to_date('20091001','yyyymmdd')
and not exists(select 1 from tt where (入库日期<to_date('20091001','yyyymmdd')
and 入库日期>t1.入库日期 or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd'))
and 设备id=t1.设备id)
and 设备id=t1.设备id 后面再加个 and 进价=t1.进价
sum(入库数)入库总数,
max(入库后库存数)入库后库存总数
from tt
where 入库日期>=to_date('20091001','yyyymmdd')
and 入库日期 <to_date('20091101','yyyymmdd')
group by 设备id,进价
union all select 设备id,进价,入库后库存数,0,入库后库存数 from tt t1
where 入库日期<to_date('20091001','yyyymmdd')
and not exists(select 1 from tt where (入库日期<to_date('20091001','yyyymmdd')
and 入库日期>t1.入库日期 or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd'))
and 设备id=t1.设备id)
C 30.00 2009-9-28 5 1 6
C 30.00 2009-9-27 3 2 5
C 40.00 2009-9-26 0 3 3在“2009年10月的统计数量”的结果里需要体现 C 即:
设备ID 进价 入库前库存总数 入库总数 入库后库存总数
C 30.00 6 0 6
C 40.00 3 0 3
union all后面的代码就是为了找出像你例子中c的这样的记录
union all 后面的sql 我不大明白,能不能解释一下,谢谢了
前面的代码是10月份的统计,这个应该没有问题
后面的代码是找出:10月份中没有对应记录的,在10月份以前找最后一条符合条件的记录,取出来像你的例子中c那样体现。
where 入库日期<to_date('20091001','yyyymmdd')
and 入库日期>t1.入库日期 --在10月以前且时间大于取出的记录
or 入库日期>=to_date('20091001','yyyymmdd') and 入库日期 <to_date('20091101','yyyymmdd') --在10月之间找出符合2种情况的记录都不存在的记录