有机构表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还不知道该怎么用杯具
记录编号 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还不知道该怎么用杯具
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
;
case when a.Order_type=2 then 1 ...
case when a.Order_type=3 then 1 ...写反了
左连接换成右连接比较好吧
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
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;
不过要看楼主的真实数据了。
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
;
应该是这样:B.V_ORGAN_ID=a.Brh_id (+)
count(case when a.Order_type=2 then 1 end)另外有没有人帮我解释下这两句SQL的意思,看不懂,我只知道sum是求和,count是统计记录数量统计记录数是不是,不止可以用count??小弟求教~
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,不计数
sum求和。符合条件的值加1.因此这两个式效果是一样的
sum(case when .. then 1 else 0)
和count(case when .. then 1 else 0)
不一样。因为用count的时候,0和1 和2甚至'a','b'。。是一样的
count(case when .. then 1 end)这里的“1”可以随便是个字符,用来有记录供统计的
可以这样理解不?
另外,
能不能再帮我解答下7楼和10楼的问题啊??
10楼的问题,就是另一个表没有对应记录的,不显示?内连接就好了,就是where 后没有加号的..
另外10楼问题,
机构ID 机构名称 信用卡 理财 信贷
福州 0 0 0
泉州 0 0 0
0592 厦门 1 0 0
查询结果,数量为0的,机构ID不读取出来,要怎么改语句呢?
福州 0 0 0
泉州 0 0 0
0592 厦门 1 0 0
查询结果,数量为0的,机构ID不读取出来,要怎么改语句呢?
连接条件的加号去掉就行了,如上
如果Order_type 不止包含以上3种,可以再加个条件
and a.Order_type in ('1','2','3')
福州 0 0 0
泉州 0 0 0
像这2条就不读取了
我的意思是要读取他们
并且把他们的ID也给读出来,
我用上面的SQL不懂为什么,Z这样情况的ID不读取
上面机构id取自a.brh_id时,若后面为0,机构id为空
如果不想为空,换成b.V_ORGAN_ID
相应的,group by后面也要换一下