请教SQL语句合并字段的写法。
Table1
姓名 创收
A 2000
B 300
A 200
Table2
姓名 花费
A 400
B 200
现在想得到一个综合结果,如下
姓名 创收 花费
A 2200 400
B 300 200
问题点数:64、回复次数:13Top
1 楼xiaowen72(小老鼠)回复于 2001-11-19 22:35:51 得分 0
insert into kk select a.name,a.in,b.out from a,b where a.name=b.name Top
2 楼Dala(Dala)回复于 2001-11-19 23:16:04 得分 0
老鼠的SQL好象不行:1.没有用SUM求和;2.如果表2中没有B的记录,则不能满足a.name=b.nameTop
3 楼chiliast(钓鱼太郎)回复于 2001-11-19 23:28:03 得分 6
select table1.姓名,sum(table1.创收) 创收,min(table2.花费) 花费
from table1,table2
where table1.姓名 = table2.姓名
group by table1.姓名Top
4 楼chiliast(钓鱼太郎)回复于 2001-11-19 23:42:37 得分 0
表2没有B的记录应该是正确的
因为B根本没有花费,所以结果不可能出现在你的综合结果中
如果强行要放进去也可以
把where table1.姓名 = table2.姓名 改为 table1.姓名 in (select table1.姓名 from table1)
Top
5 楼nononono(null,null)回复于 2001-11-20 00:00:35 得分 10
如果A有创收无花费, B无创收有花费, 怎么办?
这个算法用外连接是比较规矩的做法
select table1.姓名,sum(table1.创收) 创收,min(table2.花费) 花费
from table1 FULL OUTER JOIN table2 ON table1.姓名 = table2.姓名
group by table1.姓名
Top
6 楼Dala(Dala)回复于 2001-11-20 00:07:49 得分 0
钓鱼太郎的SQL还是不行。
其实表3的姓名中应该包括所有出现在表1和表2姓名中的记录,如果某人在表1中没出现,则相当于创收为0;同样如果某人在表2中没出现,则相当于花费为0.
再举例Table1
姓名 创收
A 2000
C 300
A 200
Table2
姓名 花费
A 400
B 20
D 200
现在想得到一个综合结果,如下
姓名 创收 花费
A 2200 400
B 0 20
C 300 0
D 0 200Top
7 楼Dala(Dala)回复于 2001-11-20 00:20:53 得分 0
根据NONONONO,使用如下SQL得到十分接近的结果(表1中没有的姓名未显示)
select table1.姓名,sum(table1.创收) 创收,sum(table2.花费) 花费
from table1 FULL OUTER JOIN table2 ON table1.姓名 = table2.姓名
group by table1.姓名
姓名 创收 花费
A 2200 400
0 20
C 300 0
0 200
nononono请再帮忙看看,贴子加分了!
Top
8 楼Dala(Dala)回复于 2001-11-20 00:49:48 得分 0
Sorry,搞错了。上边SQL结果是:
姓名 创收 花费
220 <-错误地把B和D的花费值加在一起了
A 2200 800 <-错误地把A的花费400加了两次
C 300
请SQL虾们继续大显身手啊!Top
9 楼l_kaifeng(江南大哥)回复于 2001-11-20 09:14:04 得分 16
以下为SQL Server的语句
Select '姓名' =
case
when a.姓名 is null then b.姓名
else
a.姓名
end
a.花费 , b.创收
( Select sum(花费) as 花费 from Table2 Group By 姓名 )As a
Full Outer Join
( Select sum(创收) as 创收 from Table1 Group By 姓名 )As b
On a.姓名 = b.姓名 Top
10 楼l_kaifeng(江南大哥)回复于 2001-11-20 09:17:51 得分 0
哦,end 后面少了一个 逗号(,)Top
11 楼Dala(Dala)回复于 2001-11-21 12:42:09 得分 0
真遗憾,我的本地数据库不支持江南大哥的SQL Server语句,thanks anyway.
没办法我只能通过临时表的方法解决了。
SQL高低手们真的没办法直接用SQL语句解决该问题吗???????????Top
12 楼hellowbh(OneBowie)回复于 2001-11-21 14:21:45 得分 0
应当使用外连接!
select a.姓名,a.创收,b.花费
from
( select table1.姓名,sum(table1.创收) 创收
from table1
group by table1.姓名
) as a
full outer join
(
select table2.姓名,sum(table2.花费) 花费
from table2
group by table2.姓名
) as b
on a.姓名=b.姓名
Top
13 楼hellowbh(OneBowie)回复于 2001-11-21 14:51:07 得分 32
改正一下。
select isnull(a.姓名,b.姓名) as 姓名,a.创收,b.花费
from
( select table1.姓名,sum(table1.创收) 创收
from table1
group by table1.姓名
) as a
full outer join
(
select table2.姓名,sum(table2.花费) 花费
from table2
group by table2.姓名
) as b
on a.姓名=b.姓名
(或者第一行为)
select isnull(a.姓名,b.姓名) as 姓名,isnull(a.创收,0) as 创收,isnull(b.花费,0) as 花费
否则有些查询出来的创收或花费为 NULL ,也许你需要他们为 0.
Top




