日期:2014-05-17  浏览次数:21198 次

SQL统计数据
有机构表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还不知道该怎么用。。。杯具

------解决方案--------------------
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;

------解决方案--------------------
没有写反啊,我担心有些“所属机构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 


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