我有以下一表:
A表
供应商名称  采购单号  物料编号 接收时间     抽查结果  处理结果
  智昌       P0012     1124    2007-09-04     合格  
  智昌       P0013     1125    2007-09-02     不合格      退货
  兴云科技   P0015     1121    2007-08-21     合格
  兴云科技   P0016     1123    2007-08-27     合格
  兴云科技   P0018     1125    2007-08-28     不合格      退货         
 以上数据每一行为一个收货批次,我想用查询得到如下结果,按供应商名称在一定时间段内分别找出不合格批次的,有退货的,并算出合格率:请商人指点一下,谢谢! 供应商名称  交货批数:  不合格批数: 退货批数:   不合格率:
  智昌         2            1             1          50%
  兴云科技     3            1             1          33% 
        

解决方案 »

  1.   

    Select 供应商名称,t as 交货批数, nc as 不合格批数,tc as 退货批数,
            trunc(nc/t*100)||'%' 
      from ( Select 供应商名称,count(*) as t,
           sum(case when 抽查结果='不合格' then 1 else 0 end) as nc,
           sum(case when 处理结果='退货  ' then 1 else 0 end) as tc) t
      

  2.   

    我测试是成功的,你试试看~~~=====================A表数据===========================SUPNAME  ORDERID      PROID GETDATE     SEARCHRESULT DORESULT
    -------- ------- ---------- ----------- ------------ --------
    zhichang P0012         1124 9/4/2007    OK           
    zhichang P0013         1125 9/2/2007    NO           tuihuo
    xingyu   P0015         1121 8/21/2007   OK           
    xingyu   P0016         1123 8/27/2007   OK           
    xingyu   P0018         1125 8/28/2007   NO           tuihuo
    =====================sql===============================select distinct 
           tt.supName,
           count(tt.orderId) over(partition by tt.supName) as Order_count,
           sum(case when searchResult= 'NO' then 1 else 0 end) over(partition by tt.supName) as Bad_count,
           sum(case when doResult= 'tuihuo' then 1 else 0 end) over(partition by tt.supName) as BackProduct_count,
           sum(case when searchResult= 'NO' then 1 else 0 end) over(partition by tt.supName)/count(tt.orderId) over(partition by tt.supName)
      from A tt;
    ====================result=============================SUPNAME  ORDER_COUNT  BAD_COUNT BACKPRODUCT_COUNT SUM(CASEWHENSEARCHRESULT='NO'T
    -------- ----------- ---------- ----------------- ------------------------------
    xingyu             3          1                 1              0.333333333333333
    zhichang           2          1                 1                            0.5
      

  3.   

    select 供应商名称,count(*),count(decode(抽查结果,'不合格',抽查结果)),count(decode(处理结果,'退货',处理结果)),count(decode(抽查结果,'不合格',抽查结果))/count(*)
    from A group by 供应商名称