2010-10-15 155 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