这个SQL语句如何写?(100分)

  • 主题发起人 主题发起人 lzliang
  • 开始时间 开始时间
L

lzliang

Unregistered / Unconfirmed
GUEST, unregistred user!
有两个数据库结构分别为:
库1: 日期1 用户代码 金额
2000.10.01 0001 150.00
2000.11.01 0001 120.00
2000.11.01 0002 100.00
2000.12.12 0001 90.00

库2: 日期2 用户代码2 金额2
2000.08.01 0001 1350.00
2001.02.12 0001 190.00
2000.09.05 0002 832.50
如何实现关联查询用户0001时结果:
日期 金额 金额2
2000.08.01 0001 1350.00
2000.10.01 0001 150.00
2000.11.01 0001 120.00
2000.12.12 0001 90.00
2001.02.12 0001 832.50
 
我觉得没门,自个写代码吧
 
用临时表吧,应该可以
 
full outer join
 
怎么会是这种数据库结构,奇怪,为何不合并呢。
解决的方法我认为还是建一个临时表。
不建临时表也可以,先将两个表中关于用户001的数据取出来,并按照日期排列(从小到大)
,然后以一个表为基准表,另一个为参照表,当取第一个表数据的时候,判断一下参照表
中是否有比第一个表(即基准表)当前数据的日期早,并且没有被取过的数据,如有,则取
参照表的数据,否则取基准表的数据。
说明一下,我这里的基准表数据和参照表数据都是查询后或者说是过滤后的数据。
现在好象没有EMAIL功能了,如果觉得我说得不清楚,而且觉得有点用的话,最好给我一个
邮件。wxnet@263.net
 
写个Procedure吧
 
如果是SqlServer7:
Select AB.Date1,AB.UserNO,A.Money,B.Money from
(select Date1,UserNO from Table1 A where UserNo='0001'
union
select Date1,UserNo from Table2 B where UserNo='0002')
as Ab left join
A on AB.Date1=A.Date1 and AB.UserNo=A.UserNo left join
B on AB.Date1=B.Date1 and AB.UserNo=B.UserNo
 
balaschen的有点小问题
这样不知行不行,我没试:
select DISTINCT ab.*,a.totalsum1,b.totalsum2
from
(select Date1 as Date,UserNo1 as UserNo from Table1
union
select Date2 as Date,UserNo2 as UserNo from table2) ab
left join
table1 a on ab.date=a.date1 and ab.UserNo=a.UserNo1
left join
table2 b on ab.date=b.date2 and ab.UserNo=b.UserNo2

 
>>balaschen的有点小问题
是哪里有问题,能不能指出来,谢谢!
 
balaschen:
执行时提示Invalid object name 'A'. 、Invalid object name 'B'.
 
问题已经解决了。sonie的答案是正确,不过balaschen的好象也差不多。
不知sonie能否解释一下。另外如果是用桌面数据库(如paradon、Access)又能否实现。
分数我先记下。
 
那要看你所指的桌面数据库支不支持上述的SQL语句,有的是支持的有的是不支持的,
有的则要改成相应的语句.
另balaschen的语句我觉得问题不仅是a和b没指定表名,而且逻辑上也还有点要变通的地方,
跟我的语句稍有点差别
(select Date1,UserNO from Table1 A where UserNo='0001'
~~~~~~~~~~~~~~~
union
select Date1,UserNo from Table2 B where UserNo='0002')
~~~~~~~~~~~~~~~~~~~~~~
 
多人答案接受了!请各位继续关注我其他的SQL问题。
 
后退
顶部