表一、yy_base表。
yy代码:   yy_code char(10)      [主键]
yy名称:   description char(30)  ==============================
A      亚洲
U      欧洲
...........
==============================
表二、客户表[表名:customer]
客户编码:cust_num    char(10)   [主键]
客户的YY码:yy_code     char(10)   表三、订单头表[表名:co]
订单号:co_num   char(10)       [主键]
客户编码:cust_num   char(10)表四、订单明细表[表名:coitem]
订单号:co_num   char(10)       [主键]
订单行号:co_line   int         [主键]
关联号:ref_num   char(10)
录入日期:input_date datetime求一过程,输出如下区域  订单总行数 内部订单行数 占总行数比百分 WEB订单行数  占总行数比百分
===========================================================================
亚洲  10000      3000         30%            7000          70%
欧洲  20000      2000         10%            18000         90%
.....
===========================================================================说明:
1、实际是按订单行统计,订单行表的录入日期在2006/06/01后的数据有效。
2、显示结果按yy_base表的yy名称显示,客户基础表中有字段存该客户的yy_code,
   订单主表有客户编码字段,订单明细中有订单号。
3、语句优化,速度快。

解决方案 »

  1.   

    说明:
    1、实际是按订单行统计,订单行表的录入日期在2006/06/01后的数据有效。
    2、显示结果按yy_base表的yy名称显示,客户基础表中有字段存该客户的yy_code,
       订单主表有客户编码字段,订单明细中有订单号。
    3、语句优化,速度快。
    -------------------------------------------
    感覺在幫你打工:(
     結果中的"内部订单行数","WEB订单行数"根據哪個欄位判斷? 关联号:ref_num char(10)??
      

  2.   

    补充一点内部订单:就是coitem表中的left(关联号,1)="Q"的
    WEB订单:就是coitem表中的left(关联号,1)="W"的对不起!!
      

  3.   

    没给出如何区分内部定单和web定单的条件吧
      

  4.   

    --沒有數據測試
    --樓主可以試試select * into #t from 
    (select A.[description] ,D.co_line,D.ref_num
    from yy_base A,customer B,co C,coitem D 
    where A.yy_code=B.yy_code  and B.cust_num=C.cust_num and C.co_num=D.co_num and D.input_date>'2006/06/01') Tselect A.[description] 区域 , B.订单总行数,C.内部订单行数,(C.内部订单行数*1.0/B.订单总行数) 占总行数比百分,D.WEB订单行数,(D.WEB订单行数*1.0/B.订单总行数) 占总行数比百分
    from yy_base A
    left join ( select [description],count(co_line) 订单总行数  from #t  group by [description]) B on A.[description]=B.[description]
    left join (select [description],count(co_line) 内部订单行数  from #t where left(ref_num,1)='Q'  group by [description]) C on A.[description]=C.[description]
    left join (select [description],count(co_line) WEB订单行数 from #t where left(ref_num,1)='W' group by [description]) D on A.[description]=D.[description]
    order by  A.[description]drop table #t
      

  5.   

    补充一点内部订单:就是coitem表中的left(关联号,1)="Q"的
    WEB订单:就是coitem表中的left(关联号,1)="W"的对不起!!
      

  6.   

    select 0.1*100+'%'
    select 区域 ,
           订单总行数,
           内部订单行数*1.0/订单总行数 *100,
           WEB订单行数,
           WEB订单行数*1.0/订单总行数 *100
    from (
    select a.yy名称 as 区域,
           (select count(1) from 订单明细表 where  订单号 = c.订单号 and 录入日期 > '2006/06/01') as 订单总行数 ,
           (select count(1) from 订单明细表 where  订单号 = c.订单号 and 录入日期 > '2006/06/01' and 判断是不是内部订单) as 内部订单行数 ,
           (select count(1) from 订单明细表 where  订单号 = c.订单号 and 录入日期 > '2006/06/01' and 判断是不是web订单) as WEB订单行数 
    from   yy_base a , customer b ,co c
    where  a.yy_code = b.yy_code
    and    b.cust_num = c.cust_num
    ) d
    order by 区域