大家好!问个问题,我在sqs server2005中查询一个视图的数据,视图是两个数据库表中的数据
SQL语句类似:
select * from
m left outer join
(select a, b,c
from n)n
on m.a=n.a
其中有很多left outer join
现在就是每次查询的时候,数据有出入,有时一致有时不一致。请问大家有什么办法解决这个问题?
SQL语句类似:
select * from
m left outer join
(select a, b,c
from n)n
on m.a=n.a
其中有很多left outer join
现在就是每次查询的时候,数据有出入,有时一致有时不一致。请问大家有什么办法解决这个问题?
sum(-d.d_money) as xse,
sum(-d.d_money)-sum(d.d_costing_price*(-d.n_amount)) as ml,
(sum(-d.d_money)-sum(d.d_costing_price*(-d.n_amount)))/case sum( -d.d_money)when 0 then 1 else sum( -d.d_money) end as mll
from v_account_stockintrade c (NoLock)
inner join v_account_stockintrade_detail d (NoLock) on c.n_stockaccount_id=d.n_stockaccount_id
inner join t_account_dir e (NoLock) on e.n_account_id=d.n_account_id
inner join t_crm_customers b (NoLock) on b.n_crm_id=c.n_crm_id
inner join t_CRM_DIR a (NoLock) on left(b.str_crm_dir,11)=a.str_crm_dir
where c.dt_chalkup between @dateup and @dateend
and a.str_crm_dir like '__.__.__.__%'
and c.str_operate_code in('006','106','606')
group by a.str_crm_dir,a.str_dir_name 大概看了一下,
写的太复杂了,
没有比较,
你后面几个join都是个这个类似的,
建议你把这几个表做个视图,然后在从这个视图中组做相应的聚合,
像这几个都有的共同条件,
可以在视图中完成,
and a.str_crm_dir like '__.__.__.__%'
and c.str_operate_code in('006','106','606')
一是,这样代码更简洁,
二是,逻辑更清楚一些,好分析.
---------
第二点可以优化的是,如果上述视图创建好后,
可以根据该视图一次性把后面几个总计,采购调拨,营销中心 .... 所有的汇总关系通过一次join就可以实现,
而不是像现在的多次join.
使用 sum + case when 就可以实现不同的聚合,
left outer join这块的原因吧。
使用左外连接以后,如果查询的时候使用到右边表的列的时候,很有可能出现楼主所说的问题哈。
left join 太多速度會很慢喲