oracle sql问题,有两张表A,B 多对多,B有一属性name:a_1,a_2,b_1,b_2,c_1,c_2。 两张表关联查询。
以B表name分组统计记录数,如何实现a_1,a_2为一组(A表中记录就算这一组a的两个都对应也只算一条,一下同),b_1,b_2一组,c_1,c_2一组(如果一条A表记...
以B表name分组统计记录数,如何实现a_1,a_2为一组(A表中记录就算这一组a的两个都对应也只算一条,一下同),b_1,b_2一组,c_1,c_2一组(如果一条A表记录对应一个a_1和b_1算两条)。怎么实现这样的实现呢,求指导,解决问题加分。
展开
展开全部
没太听明白呀,是不是这样
select sum(case when b.name in ('a_1','a_2') then 1 else 0) as a,
sum(case when b.name in ('b_1','b_2') then 1 else 0) as b,
sum(case when b.name in ('c_1','c_2') then 1 else 0) as c
from a,b where a.关联字段=b.关联字段
select sum(case when b.name in ('a_1','a_2') then 1 else 0) as a,
sum(case when b.name in ('b_1','b_2') then 1 else 0) as b,
sum(case when b.name in ('c_1','c_2') then 1 else 0) as c
from a,b where a.关联字段=b.关联字段
更多追问追答
追问
谢谢您的回答,本身是多对多关系,比如A表有一条数据,B表中有三条对应,name 分别是a_1,a_2,b_1. 我其实是想以a,b,c三种类型(实际表中不存在的这种关系)分组,这样时,a组下面count为1,b组下面count为1,c组count为0. 你上面的统计应该没有去掉这种组内重复呢。
追答
那就把你想分组的name写到同一个in里就OK吧?
你说的组内重复是什么意思,没懂呀
展开全部
先建立一个字段,把 a_1,a_2更新为一个值,把b_1,b_2更新为一个值,
然后使用这个字段做分组,就可以了吧。
如果是a_1,a_2,b_1,b_2这样的,也可以 select left(name,2) 作为一个虚拟字段,然后用这个虚拟字段作分组。
然后使用这个字段做分组,就可以了吧。
如果是a_1,a_2,b_1,b_2这样的,也可以 select left(name,2) 作为一个虚拟字段,然后用这个虚拟字段作分组。
追问
谢谢您的回答,实际名字有些不同呢,请问下虚拟字段怎么搞呢?
追答
select v from ( select left(name,2) as v from table ) a
group by v
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-05-14
展开全部
SELECT
SUBSTR(name, 1, INSTR (name, '_') -1 ),
SUM () / COUNT() ...... 相关函数
FROM
B JOIN A ON ( 关联条件 )
GROUP BY
SUBSTR(name, 1, INSTR (name, '_') -1 )
SUBSTR(name, 1, INSTR (name, '_') -1 ),
SUM () / COUNT() ...... 相关函数
FROM
B JOIN A ON ( 关联条件 )
GROUP BY
SUBSTR(name, 1, INSTR (name, '_') -1 )
追问
谢谢您的回答,能详细点吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询