免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1901 | 回复: 12
打印 上一主题 下一主题

请教一条SQL [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-11 14:26 |只看该作者 |倒序浏览
表A,B;2表结构一致包含2个字段:month,value,A表有一行数据,B表为空
现在要合计A,B表的数据,
select  v1+v2 as totalvalue
from
(select  A.value as v1
from A),
(select b.value  as v2
)
结果是没有一行数据


请教怎么写

论坛徽章:
0
2 [报告]
发表于 2006-10-11 15:13 |只看该作者
select  v1+v2 as totalvalue
from
(select  nvl(A.value,0) as v1
from A),
(select nvl(b.value,0)  as v2
from B)
在oracle中null+number还是null

论坛徽章:
0
3 [报告]
发表于 2006-10-11 15:35 |只看该作者

回复 1楼 shgzf 的帖子

你没有理解空(null)的用法,去看看关于空的介绍吧

论坛徽章:
0
4 [报告]
发表于 2006-10-11 21:54 |只看该作者
select  v1+v2 as totalvalue
from
(select  nvl(A.value,0) as v1
from A),
(select nvl(b.value,0)  as v2
from B)
在oracle中null+number还是null

这么写也不行吧,B表是空,并不是说字段是null,是根本没有记录啊

论坛徽章:
0
5 [报告]
发表于 2006-10-11 23:36 |只看该作者
select sql_id from test5

    SQL_ID
----------
         1
         2

select sql_id from test6

SQL_ID
----------
         1
         2

select   nvl(ta.v1,0)+nvl(tb.v1,0)
                      from (select sql_id as v1 from test5) ta
                                   full outer join
                              (select sql_id as v1 from test6) tb
                                   on (1=1);

result:
NVL(TA.V1,0)+NVL(TB.V1,0)
-------------------------
                        2
                        3
                        3
                        4

truncate table test6;(清空表test6的数据)

select   nvl(ta.v1,0)+nvl(tb.v1,0)
                      from (select sql_id as v1 from test5) ta
                                   full outer join
                              (select sql_id as v1 from test6) tb
                                   on (1=1);

result:
NVL(TA.V1,0)+NVL(TB.V1,0)
-------------------------
                        1
                        2

这个sql语句会产生cartesian效果,如果要用于测试,注意数据量。。。
如果要实现你的功能,一定要有两张表的连接条件,防止产生cartesian
你现在的需求还不是很明晰。

论坛徽章:
0
6 [报告]
发表于 2006-10-11 23:39 |只看该作者
楼主的意思是不是表A包含了month,value, 表B包含month和value,
对两个表进行统计, 将相同月份的value相加, 得到这个月的value ?

如果是这样的话, 可以用下面的语句求得
select A.month month, nvl(a.value,0)+nvl(b.value, 0) totalvalue
from A full outer join B
on A.month = B.month;

论坛徽章:
0
7 [报告]
发表于 2006-10-12 11:57 |只看该作者
我的需求是这样的,表A,B都有12个月,然后要将这2张表中相同月的数据相加,但是表B有可能是没有数据的
goeast 该用户已被删除
8 [报告]
发表于 2006-10-12 14:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2006-10-12 14:20 |只看该作者
原帖由 shgzf 于 2006-10-12 11:57 发表
我的需求是这样的,表A,B都有12个月,然后要将这2张表中相同月的数据相加,但是表B有可能是没有数据的


这个查询可以满足你的要求

  1. select A.month month, nvl(a.value,0)+nvl(b.value, 0) totalvalue
  2. from A full outer join B
  3. on A.month = B.month;
复制代码


你一开始写的查询语句误导大家了

论坛徽章:
0
10 [报告]
发表于 2006-10-12 14:23 |只看该作者
原帖由 goeast 于 2006-10-12 14:08 发表
说表都有12个月,又说B表可能没数据,是指VALUE是空,还是说根本没对应的月份那一行


楼主的意思是B中没有某一个月对应的记录, 比如A表如下:
month    value
------------------------------
3           5
4           6

B表如下
month    value
------------------------------
3           3

要求得到的结果如下:

month  value
-----------------------------
3           8
4           6
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP