各位大侠,小弟遇到一个SQL查询的问题,请指教。
一张表:orderDeal:
                 (两个状态1和2)(当orderState为1,时,它是空,当orderState为2时,它为1办理或2部分办理或拒绝办理3)
managerName     orderState     orderResult      deptId
刘                  1                                101
王                  2                2               102
刘                  2                1               101
刘                  2                3               101
王                  1                                 102
王                  2                1                102
刘                  1                                 101    
金                   2                  2                  102
刘                  2                 1               101    
刘                  2                 1                101    
李                  2                 1                101 表: dept
dept_id              dept_name
101                    市场部
102                     工程部
103                      实施部
现要用SQL查询出:               (orderState:1)  (orderState:2)  (orderState:3)(申请个数-三种状态的办理数(表中同一managerName出现次数)
dept_name      managerName      办理个数                部分办理个数            拒绝办理个数           未办理个数      申请个数
    市场部             刘             3                   0                      1                    2           6
   市场部             李            1                    0                      0                     0          1
    工程部             王            1                    1                      0                    1           3
    工程部             金            0                    1                      0                     0          1各位大侠们,请指教。(PS:很急)

解决方案 »

  1.   

    select B.dept_name,A.managerName,
     办理个数=sum(case when orderState=2 and orderResult=1 then 1 else 0 end ),
      部分办理个数=sum(case when orderState=2 and orderResult=2 then 1 else 0 end ),
      拒绝办理个数=sum(case when orderState=2 and orderResult=3 then 1 else 0 end ),
      未办理个数=sum(case when orderState=1 then 1 else 0 end ),
      申请个数 =count(*)
    from OrderDeal A
    left join dept B
    on A.deptid=B.dept_id
    group by B.dept_name,A.managerName
      

  2.   

    嘿!习惯了sqlserver的写法
    修改:
    select B.dept_name,A.managerName,
    sum(case when orderState=2 and orderResult=1 then 1 else 0 end )  办理个数,
    sum(case when orderState=2 and orderResult=2 then 1 else 0 end )  部分办理个数,
    sum(case when orderState=2 and orderResult=3 then 1 else 0 end )  拒绝办理个数,
    sum(case when orderState=1 then 1 else 0 end ) 未办理个数,
    count(*)   申请个数 
    from OrderDeal A
    left join dept B
    on A.deptid=B.dept_id
    group by B.dept_name,A.managerName
      

  3.   

    好像还是sqlsever的写法,oracle中好像没case when的语法
      

  4.   


    select B.dept_name,A.managerName, 
    sum(decode(orderState,1,1,0))  办理个数, 
    sum(decode(orderState,2,1,0))  部分办理个数, 
    sum(decode(orderState,3,1,0))  拒绝办理个数, 
    sum(decode(orderState,null,1,0))  ) 未办理个数, 
    count(*)  申请个数 
    from OrderDeal A 
    left join dept B 
    on A.deptid=B.dept_id 
    group by B.dept_name,A.managerName 
      

  5.   

    select B.dept_name,A.managerName, 
    sum(decode(orderResult,1,1,0))  办理个数, 
    sum(decode(orderResult,2,1,0))  部分办理个数, 
    sum(decode(orderResult,3,1,0))  拒绝办理个数, 
    sum(decode(orderResult,null,1,0))  ) 未办理个数, 
    count(*)  申请个数 
    from OrderDeal A 
    left join dept B 
    on A.deptid=B.dept_id 就是你要的结果吧