日期:2014-05-18  浏览次数:20545 次

求代码优化...下述代码执行时间超长.
SQL code

select * from
(
select 区域,购货单位名称,订单ID,'' 配送单号,产品名称,件数,'0'配送件数,'0' 出库件数,''出库单号,出货仓库,订单日期,''出库日期
from 订单表  where 订单id not in (select distinct 订单ID from 出库表)



union 
select b.区域,b.购货单位名称,b.订单ID,c.配送单号,b.产品名称,b.件数,c.配送件数,isnull(c.出库件数,b.出库件数)出库件数,isnull(c.出库单号,b.出库单号)出库单号,isnull(b.出货仓库,c.出货仓库)出货仓库,b.订单日期,isnull (b.出库日期, c.出库日期)出库日期
from(
select a.区域,a.购货单位名称,a.订单ID,''配送单号,a.产品名称,a.件数,'0'配送件数,c. 出库件数,isnull(c.出货仓库,a.出货仓库)出货仓库,c.出库单号,a.订单日期,c.出库日期 
from(
select 区域,购货单位名称,订单ID,产品名称,件数,订单日期,出货仓库 from 订单表 )a 
full  join
(select 订单ID,配送单号,产品名称,件数 出库件数,出货仓库,出库单号,出库日期 from 出库表 where 配送单号 is null)c  
on a.订单ID=c.订单ID AND a.产品名称=c.产品名称 
)b
full join(select a.区域,a.购货单位名称,a.订单ID,s.配送单号,a.产品名称,a.件数,s.配送件数,s.出库件数,s.出货仓库,s.出库单号,a.订单日期,s.出库日期 
from(select 区域,购货单位名称,订单ID,产品名称,件数,订单日期,出货仓库 from 订单表)a 
full  join(
select 区域,购货单位名称,订单ID,配送单号,产品名称,件数,配送件数,出库件数,出货仓库,出库单号,订单日期,出库日期 

from(select a.区域,a.购货单位名称,a.订单ID,a.产品名称,a.件数,c.配送单号,b. 件数 配送件数,c.出库件数,isnull (b.起点,c.出货仓库)出货仓库,
c.出库单号,c.出库日期,a.订单日期  
from(select 区域,购货单位名称,订单ID,产品名称,件数,订单日期,出货仓库 from 订单表)a  
full  join 配送表 b on a.订单ID=b.订单ID AND a.产品名称=b.产品名称 
full  join (select 订单ID,配送单号,产品名称,件数 出库件数,出货仓库,出库单号,出库日期 from 出库表 )c 
on a.订单ID=c.订单ID AND a.产品名称=c.产品名称 and isnull(b.配送单号,'')= isnull(c.配送单号,'')
and isnull (b.起点,'')=isnull (c.出货仓库,''))b
)s
on  a.订单ID=s.订单ID AND a.产品名称=s.产品名称 
)c  on b.订单ID=c.订单ID AND b.产品名称=c.产品名称
)d
where 订单日期 between '2012-02-01' and '2012-02-04'




------解决方案--------------------
SQL code

视图 索引 等高手...

------解决方案--------------------
貌似一共就 订单表,出库表,配送表 三个表吧?

这是在做什么?嵌套来嵌套去的我都看晕了
------解决方案--------------------
SQL code
SELECT    区域 ,
                    购货单位名称 ,
                    订单ID ,
                    '' 配送单号 ,
                    产品名称 ,
                    件数 ,
                    '0' 配送件数 ,
                    '0' 出库件数 ,
                    '' 出库单号 ,
                    出货仓库 ,
                    订单日期 ,
                    '' 出库日期
          FROM      订单表
          WHERE     订单id NOT IN ( SELECT DISTINCT
                                            订单ID
                                  FROM      出库表 )

------解决方案--------------------
有些嵌套是不是多余了?
------解决方案--------------------
SQL code

select * from 订单表 a 
full join 出库表 b on a.关系字段=b.关系字段 --and 其他关联字段
full join 配送表 c on a.关系字段=c.关系字段 --and 其他关联字段
--where 把abc的所有条件都放到这里

------解决方案--------------------
code=SQL]那就分开来,用临时Table。一层一层的写出来。
insert into #table1
select 区域,购货单位名称,订单ID,'' 配送单号,产品名称,件数,'0'配送件数,'0' 出库件数,''出库单号,出货仓库,订单日期,''出库日期
from 订单表 where 订单id not in (select distinct 订单ID from 出库表)
......[[/code]
------解决方案--------------------
直接给出表结构和部分数据,以及需要的结果。不然这个代码看的很累啊。
------解决方案--------------------
创建临时表吧 看着很累
------解决方案--------------------
你给出表结构的定义和说明吧,真还没搞清楚你要干什么,直觉是你对数据库设计的四大准则的理解有偏差、对应用没搞清楚,不会有表需要这么来用的。
------解决方案--------------------
探讨
SQL code


select * from
(
select 区域,购货单位名称,订单ID,'' 配送单号,产品名称,件数,'0'配送件数,'0' 出库件数,''出库单号,出货仓库,订单日期,''出库日期
from 订单表 where 订单id not in (select distinct 订单ID from 出库表)



union
select b.区域,b……