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'。。是一样的