2010-10-15 120 views
-4

可能重复:
How to join two tables连接两个表

表1

Date   StartingAum 

07/01/2010  120 
08/01/2010  220 
09/01/2010  320 

表2

Date   DepContr withdra  
01/01/2010  60   15 
02/01/2010  70   25 
03/01/2010  80   15 
04/01/2010  30   89 
05/01/2010  40   15 
06/01/2010  25   85 
07/01/2010  16   17 
08/01/2010  19   21 
09/01/2010  68   79 

输出应该是

Date   StartingAum  DepContr withdra  
01/01/2010  0    60   15 
02/01/2010  0    70   25 
03/01/2010  0    80   15 
04/01/2010  0    30   89 
05/01/2010  0    40   15 
06/01/2010  0    25   85 
07/01/2010  120    16   17 
08/01/2010  220    19   21 
09/01/2010  320    68   79 

我需要的输出恰好类似于

+1

对您重复询问如何生成结果集是不合适的。从你的[上一个问题](http://stackoverflow.com/questions/3945837/how-to-join-two-tables)学习,甚至在一个小时前就问过。 – 2010-10-15 21:10:15

+1

-1对于类似的问题在时间上如此接近。在IRC(聊天室)中,快速射击Q和A可能​​更合适。 Google“IRC sql”。你可以在那里进行对话,这可能会非常有帮助。 – orolo 2010-10-15 21:18:04

+1

欢迎来到stackoverflow!有些人有时会有点胡思乱想,只是忽略他们并提出问题。 – 2010-10-15 21:32:42

回答

2
DECLARE @Table1 table ([date] datetime, StartingAum int) 
DECLARE @Table2 table ([date] datetime, DepContr int, withdra int) 
INSERT @Table1 VALUES ('07/01/2010',  120) 
INSERT @Table1 VALUES ('08/01/2010',  220) 
INSERT @Table1 VALUES ('09/01/2010',  320) 

INSERT @Table2 VALUES ('01/01/2010',  60 ,   15) 
INSERT @Table2 VALUES ('02/01/2010',  70 ,   25) 
INSERT @Table2 VALUES ('03/01/2010',  80 ,   15) 
INSERT @Table2 VALUES ('04/01/2010',  30 ,   89) 
INSERT @Table2 VALUES ('05/01/2010',  40 ,   15) 
INSERT @Table2 VALUES ('06/01/2010',  25 ,   85) 
INSERT @Table2 VALUES ('07/01/2010',  16 ,   17) 
INSERT @Table2 VALUES ('08/01/2010',  19 ,   21) 
INSERT @Table2 VALUES ('09/01/2010',  68 ,   79) 


SELECT 
    t2.[Date] 
     ,ISNULL(t1.StartingAum, 0) AS StartingAum  
     ,t2.DepContr 
     ,t2.withdra 
    FROM @Table2   t2 
     LEFT JOIN @Table1 t1 ON t2.[Date] = t1.[Date] 
    ORDER BY t2.[Date] 

OUTPUT:

Date     StartingAum DepContr withdra 
----------------------- ----------- ----------- ----------- 
2010-01-01 00:00:00.000 0   60   15 
2010-02-01 00:00:00.000 0   70   25 
2010-03-01 00:00:00.000 0   80   15 
2010-04-01 00:00:00.000 0   30   89 
2010-05-01 00:00:00.000 0   40   15 
2010-06-01 00:00:00.000 0   25   85 
2010-07-01 00:00:00.000 120   16   17 
2010-08-01 00:00:00.000 220   19   21 
2010-09-01 00:00:00.000 320   68   79 
+0

startingAum列将全部返回0 – rakesh 2010-10-15 21:16:21

+1

如果其Table1值为零,或者匹配的行不在Table2中,则startAum将返回零。如果在这些日期值中有任何时间(例如'2010-01-01 13:45:23.123'),那么它们必须完全相同,否则连接将找不到匹配项,并且startingAum将为零。如果日期有任何时间,请将'LEFT JOIN'行改为:'LEFT JOIN @ Table1 t1 ON DATEADD(day,DATEDIFF(day,0,t2。[Date]),0)= DATEADD(day, DATEDIFF(day,0,t1。[Date]),0)',它会加入日期而不是时间。 – 2010-10-15 21:22:02

+0

如果它们是变量@temp表或实际的tempdb #temp表应该不重要,只需将'FROM @ Table2 t2'改为'FROM#Table2 t2'和'LEFT JOIN @ Table1 t1'到'LEFT JOIN#Table1 t1'你应该很好走。 – 2010-10-15 21:32:02

0

我想你应该看看这个页面:http://www.w3schools.com/sql/sql_union.asp 那可能有帮助?

+0

对不起,我的回答可能不是最好的,但我需要更好地解释你正在计算的内容,然后才能帮助你构建所需的SQL。我看到一些其他的答案已经在做,所以我会等着看是否需要更多的答案。对不起,关于跛脚的链接。 – BerggreenDK 2010-10-15 21:44:27