select sum(a.totalmoney) from pikerecord a,vehicleregister b where a.vehiclenumber =b.vehiclenumber and b.enterpriseid='dw03';select sum(a.totalmoney) from pikerecord a,vehiclelogout b where b.vehiclenumber not in (select vehiclenumber from vehicleregister ) and a.vehiclenumber =b.vehiclenumber and b.enterpriseid='dw03' ;上面两条SQL语句得到了两个值,分别是pikerecord 和vehicleregister 关联查询。pikerecord 和vehiclelogout 查询。有没有办法把两条SQL语句写成一条SQL语句呢?
select sum(a.totalmoney) from pikerecord a,vehicleregister b where a.vehiclenumber =b.vehiclenumber and b.enterpriseid='dw03';select sum(a.totalmoney) from pikerecord a,vehiclelogout b where b.vehiclenumber not in (select vehiclenumber from vehicleregister ) and a.vehiclenumber =b.vehiclenumber and b.enterpriseid='dw03' ;上面两条SQL语句得到了两个值,分别是pikerecord 和vehicleregister 关联查询。pikerecord 和vehiclelogout 查询。有没有办法把两条SQL语句写成一条SQL语句呢?
sum(case when not exists(select 1 from vehicleregister where vehiclenumber=b.vehiclenumber) then a.totalmoney end)
from pikerecord a,vehiclelogout b
where a.vehiclenumber =b.vehiclenumber and b.enterpriseid='dw03' ;
where b.vehiclenumber = a.vehiclenumber
and b.enterpriseid = 'dw03')
then a.totalmoney
end),
sum(case when exists (select 1 from vehiclelogout b
where b.vehiclenumber = a.vehiclenumber
and b.enterpriseid = 'dw03'
and not exists(select 1 from vehicleregister
where b.vehiclenumber = vehiclenumber))
then a.totalmoney
end)
from pikerecord a;如果vehiclelogout.enterpriseid='dw03'对应在vehicleregister中的enterpriseid也是'dw03',那么还可以将第二个case中的not exists去掉,用第二个sum减去第一个sum
where b.vehiclenumber = a.vehiclenumber
and b.enterpriseid = 'dw03')
then a.totalmoney
when exists (select 1 from vehiclelogout b
where b.vehiclenumber = a.vehiclenumber
and b.enterpriseid = 'dw03'
and not exists(select 1 from vehicleregister
where b.vehiclenumber = vehiclenumber))
then a.totalmoney
end)
from pikerecord a;这样?
where b.vehiclenumber = a.vehiclenumber
and b.enterpriseid = 'dw03')
or exists (select 1 from vehiclelogout b
where b.vehiclenumber = a.vehiclenumber
and b.enterpriseid = 'dw03')
then a.totalmoney
end)
from pikerecord a;not exists去掉应该也可以
select
sum(case when not exists(select 1 from vehicleregister where vehiclenumber=b.vehiclenumber) then 2*a.totalmoney else a.totalmoney end)
from pikerecord a,vehiclelogout b
where a.vehiclenumber =b.vehiclenumber and b.enterpriseid='dw03'
这样应该行了
select sum(totalmoney) from pikerecord a
where exists(select 1 from vehiclelogout where vehiclenumber=a.vehiclenumber)
or exists(select 1 from vehicleregister where vehiclenumber=a.vehiclenumber)
就是求出a表中vehiclenumber存在于另外两个表中的记录的totalmoney的和吧
select sum(totalmoney) from pikerecord a
where exists(select 1 from vehiclelogout where vehiclenumber=a.vehiclenumber and enterpriseid='dw03')
or exists(select 1 from vehicleregister where vehiclenumber=a.vehiclenumber and enterpriseid='dw03')