oracle创建视图存放多表数据 10
现在我的oracle库里有多张表,现在需要创建视图存放多表数据,表结构为编号1-编号2,编号1-编号3,由于时间不同,表里面有很多编号1-2和1-3的对应关系,现在要把编...
现在我的oracle库里有多张表,现在需要创建视图存放多表数据,表结构为编号1-编号2,编号1-编号3,由于时间不同,表里面有很多编号1-2和1-3的对应关系,现在要把编号1作为唯一,来获取与编号2对应的次数,与编号3对应的次数……依次类推,想使用SQL语句来实现,求指导(有很多张表)。
展开
1个回答
2015-05-15
展开全部
create or replace view 结果视图表名 as
select a.编号1,a.编号2,
(select count(*) from 表1 a group by a.编号1 ) as 与编号2对应次数, b.编号1,b.编号2,
(select count(*) from 表1 a,表2 b where b.编号1=a.编号1 group by b.编号1 ) as 与编号3对应次数,
c.编号1,c.编号2,
(select count(*) from 表1 a,表3 c where c.编号1=a.编号1 group by c.编号1 ) as 与编号4对应次数,
……
from 表1 a
left join 表2 b on b.编号1=a.编号1
left join 表3 c on c.编号1=a.编号1
……
group by a.编号1 order by a.编号1 asc
select a.编号1,a.编号2,
(select count(*) from 表1 a group by a.编号1 ) as 与编号2对应次数, b.编号1,b.编号2,
(select count(*) from 表1 a,表2 b where b.编号1=a.编号1 group by b.编号1 ) as 与编号3对应次数,
c.编号1,c.编号2,
(select count(*) from 表1 a,表3 c where c.编号1=a.编号1 group by c.编号1 ) as 与编号4对应次数,
……
from 表1 a
left join 表2 b on b.编号1=a.编号1
left join 表3 c on c.编号1=a.编号1
……
group by a.编号1 order by a.编号1 asc
追问
我按照你给的语句运行了,遇到点问题,还有就是如果是有左连接的话数据会少很多,就是表2,表3以及表n中有些数据表1中并没有,这样的话就会自动漏掉了,所以是不是使用union all 更好?但是具体语句我还是不会,麻烦继续帮我看看,万分感谢。
追答
或者你可以另外创建一个视图专门存放所有表的编号1的集合和分组,这里再利用所有分表编号1和视图表编号1相等的条件取值,上面那个b.编号1,b.编号2,c.编号1,c.编号2,中b.编号1,c.编号1是多余的写错了
参考下面
为了帮助网友解决“如何用SQL语句汇总两张不同的表相同的列”相关的问题,中国学网通过互联网对“如何用SQL语句汇总两张不同的表相同的列”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:如何用SQL语句汇总两张不同的表相同的列的数量如A1(a,b2,c1);A2(a,b2,c2),c代表数量,如何将查询c的数量,具体解决方案如下:
解决方案1:
select a.a,a.b2,sum(isnull(a.shl,0)+isnull(b.shl,0)) shl --数据结果集 from (select a,b2,sum(c1) shl from a1 group by a,b2) a --第一张表数据集合 full outer join --显示所有不匹配 (select a,b2,sum(c2) shl from a2 group by a,b2) b --第二张表数据集合 on a.a=b.a and a.b2=b.b2 --两表相同条件字段 这样的写法避免两张表数据不同(比如A1表里有而A2表里没有或A2有A1没有)导致统计差异。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询