求一段sql语句

来源:百度知道 编辑:UC知道 时间:2024/05/18 05:30:15
数据库有a, b 两个表,a表有三个字段(id int, code varchar 20, name varchar 100), b表有四个字段(id int, code varchar 20, month_ int, outlay int)。两个表以id为主键。

现在b表有1,2,4月数据,缺3月数据。

要求使用sql语句,得到以下结果。
code name month_ outlay
一月数据行
二月数据行
三月数据行(显示 code name month_ 对应的数据,outlay为空)
四月数据行
a表为信息表,b表为费用表.在a表中,id 为主键,编码字段code为unique,名称字段;b表中,id为主键,编码字段code为外键指向a表中的code,月分字段month_, 费用字段outlay。关系一对多。
a表 b表
id code name id code month_ outlay
1 000001 商店1 1 00001 1 100
2 000002 商店2 2 00002 1 50
3 00001 2 200
要求一:查查询费用时得到以下的结果(以2月份为例)
code name month outlay
00001 商店1 2 50
00002 商店2 2 null
错误结果
00001 商店1 2 50
要求二:
统计时出现以下的结果以从1月份到2月份为例
code name month outlay 备注
00001 商店1 1-2 300
00002 商店2 1-2 50 缺少2月数据

SELECT a.[code], a.[name], b.[month_], b.[outlay]
FROM a
LEFT OUTER JOIN b
ON(a.[id] = b.[id])

回答者: 闫国上 - 经理 五级
这位说的基本对,不过有错误,我给改了改。

另外,这里的假设是你表a是主表,与表b是一对多的关系。另外,假设那个b.code字段是a.code的冗余。

select a.code,a.name,b.month_ ,b.outlay from a,b where a.id=b.id(+)

要是结果不对你就把(+)放到a.id后边,并把b.id后的(+)去掉

表述的不清。A表的数据是什么?

select a.code,a.name,b.month_ ,b.outlay from a,b
left outer join a on a.id=b.id

不知道对不,左外连接你试试!

select a.code,a.name,b.month_ ,b.outlay from a,b
INNER JOIN a on a.id=b.id