有机构表sys_organ
记录编号 V_REC_ID      Varchar2 (10)        PK
机构ID V_ORGAN_ID    Varchar2 (10)
机构名称 V_ORGAN_NM    Varchar2 (20) 预约单表order
预约单编号     Order_id Number(6)  
预约日期       Order_date Char(8)
预约类型       Order_type Char(1)  1:信用卡2:理财业务3:信贷业务
所属机构ID     Brh_id Char(9)  与表sys_organ对应现在想用sql查询做下统计,查询结果是 机构ID,机构名,信用卡件数,理财件数,信贷件数
说实话,咱count还不知道该怎么用杯具

解决方案 »

  1.   

    select a.brh_id,b.V_ORGAN_NM,
           count(case when a.Order_type=1 then 1 end),
           count(case when a.Order_type=1 then 2 end),
           count(case when a.Order_type=1 then 3 end),
      from order a,sys_organ b
    where a.Brh_id =B.V_ORGAN_ID(+)
    group by a.brh_id,b.V_ORGAN_NM
    ;
      

  2.   

    汗..万兄粗心了
    case when a.Order_type=2 then 1 ...
    case when a.Order_type=3 then 1 ...写反了
    左连接换成右连接比较好吧
      

  3.   

    select a.brh_id,b.V_ORGAN_NM, 
          count(case when a.Order_type=1 then 1 end), 
          count(case when a.Order_type=1 then 2 end), 
          count(case when a.Order_type=1 then 3 end), 
      from order o,sys_organ s 
    where o.Brh_id(+) =s.V_ORGAN_ID(+) 
    group by o.brh_id,s.V_ORGAN_NM 
      

  4.   

    select a.brh_id,b.V_ORGAN_NM, 
          sum(case when a.Order_type=1 then 1 else 0 end), 
          sum(case when a.Order_type=2 then 1 else 0 end), 
          sum(case when a.Order_type=3 then 1 else 0 end), 
      from order a,sys_organ b 
    where B.V_ORGAN_ID=a.Brh_id (+) 
    group by a.brh_id,b.V_ORGAN_NM;
      

  5.   

    没有写反啊,我担心有些“所属机构ID”没有对应的名称。
    不过要看楼主的真实数据了。
    order_type是写错了,应该是
    select a.brh_id,b.V_ORGAN_NM, 
          count(case when a.Order_type=1 then 1 end), 
          count(case when a.Order_type=2 then 1 end), 
          count(case when a.Order_type=3 then 1 end)
      from order a,sys_organ b 
    where a.Brh_id =B.V_ORGAN_ID(+)  --这里可以不用(+) 
    group by a.brh_id,b.V_ORGAN_NM 

      

  6.   

    where a.Brh_id (+)=B.V_ORGAN_ID
      

  7.   


    应该是这样:B.V_ORGAN_ID=a.Brh_id (+) 
      

  8.   

    试验中,一个问题,BRH_ID只显示,那些有数据统计出来的,3种类型的数量都为0的,BRH_ID不显示
      

  9.   

    sum(case when a.Order_type=2 then 1 else 0 end)
    count(case when a.Order_type=2 then 1 end)另外有没有人帮我解释下这两句SQL的意思,看不懂,我只知道sum是求和,count是统计记录数量统计记录数是不是,不止可以用count??小弟求教~
      

  10.   

    case when语句是标准的sql语句
    sum(case when a.Order_type=2 then 1 else 0 end)
    这个求和的对象是,当a.Order_type=2时候记1,否则为0,比如3条记录
    Order_type
    2
    1
    3
    那么这个sum的结果就是1+0+0 = 1;后面的count也是这样,只不过当Order_type!=2时为Null,不计数
      

  11.   

    count统计非空的值的数目
    sum求和。符合条件的值加1.因此这两个式效果是一样的
    sum(case when .. then 1 else 0)
    和count(case when .. then 1 else 0)
    不一样。因为用count的时候,0和1 和2甚至'a','b'。。是一样的
      

  12.   

    恩了解了,sum(case when .. then 1 else 0)  这里的“1”必须是数值来相加的
    count(case when .. then 1 end)这里的“1”可以随便是个字符,用来有记录供统计的
    可以这样理解不?
    另外,
    能不能再帮我解答下7楼和10楼的问题啊??
      

  13.   

    没有对应?是指某些机构没有表单的情况吗,用外连接就行了。此时count(case .. then 后面的不能为1.要填表单表的一个字段。因为count("常量")统计的是表中的记录数目
    10楼的问题,就是另一个表没有对应记录的,不显示?内连接就好了,就是where 后没有加号的..
      

  14.   

    count(case when a.Order_type=2  then Order_id  end)表中的字段名,这样没错吧。
    另外10楼问题,
    机构ID   机构名称        信用卡   理财      信贷
    福州       0 0 0
            泉州          0 0 0
    0592 厦门              1       0       0
    查询结果,数量为0的,机构ID不读取出来,要怎么改语句呢? 
      

  15.   

    机构ID  机构名称        信用卡  理财      信贷 
             福州             0     0        0 
            泉州             0      0        0 
    0592    厦门              1     0        0 
    查询结果,数量为0的,机构ID不读取出来,要怎么改语句呢?
      

  16.   

    where a.Brh_id =B.V_ORGAN_ID 
    连接条件的加号去掉就行了,如上
    如果Order_type 不止包含以上3种,可以再加个条件
    and a.Order_type in ('1','2','3')
      

  17.   

    不是这个意思,如果去掉(+)的话,
            福州            0    0        0 
            泉州            0      0        0 
    像这2条就不读取了
    我的意思是要读取他们
    并且把他们的ID也给读出来,
    我用上面的SQL不懂为什么,Z这样情况的ID不读取
      

  18.   

    ...理解错了,是要读取名称不读取id啊..怎么看着有点别扭
    上面机构id取自a.brh_id时,若后面为0,机构id为空
    如果不想为空,换成b.V_ORGAN_ID
    相应的,group by后面也要换一下