2015-10-19 24 views
-3

我是數據庫的新手。檢查Sql Fiddle。此刻,我獲得的列數超過了我需要的數量(檢查小提琴輸出)。如何根據Sql-Server中的兩列連接表

Select 
    Test1.email1, 
    Test1.dt1, 
    Test2.StepsPerDay, 
    Test2.DistancePerDay 
From 
    Test1 
Inner join 
    Test2 ON Test1.dt1 = Test2.dt2 
order by 
    dt1 

我期望的輸出是

╔════════╦════════════╦═════════════╦════════════════╗ 
║ Email1 ║ Dt1  ║ StepsPerDay ║ DistancePerDay ║ 
╠════════╬════════════╬═════════════╬════════════════╣ 
║ abc ║ 2015-01-15 ║   500 ║   100 ║ 
║ abc ║ 2015-01-19 ║   600 ║   100 ║ 
║ xyz ║ 2015-05-13 ║   200 ║   100 ║ 
║ xyz ║ 2015-05-14 ║   200 ║   100 ║ 
║ xyz ║ 2015-05-15 ║   200 ║   100 ║ 
║ xyz ║ 2015-05-16 ║   200 ║   100 ║ 
║ xyz ║ 2015-05-17 ║   200 ║   100 ║ 
╚════════╩════════════╩═════════════╩════════════════╝ 
+0

左連接永遠不會返回更少的行,但可能更多(取決於表數據)。 – jarlh

+0

在xyz用戶的提琴輸出中,我得到很多行。我不知道爲什麼? –

+1

小提琴沒有選擇,也沒有數據... – jarlh

回答

3

你只匹配日期,但沒有電子郵件。請看下圖:

Select 
    Test1.email1, 
    Test1.dt1, 
    Test2.StepsPerDay, 
    Test2.DistancePerDay 
From Test1 
    Inner join Test2 
    ON Test1.email1=Test2.email2 
    and Test1.dt1 = Test2.dt2 
order by dt1 
1

更好JOIN(感謝dotnetkid),但也有GROUP BY

select Test1.email1, 
     Test1.dt1, 
     SUM(Test2.StepsPerDay) as StepsPerDay, 
     SUM(Test2.DistancePerDay) as DistancePerDay 
From Test1 
    Inner join Test2 
    ON Test1.dt1=Test2.dt2 
    and Test1.email1 = Test2.email2 
group by Test1.email1, Test1.dt1 
order by dt1 

如果您也想爲test1的電子郵件結果/日期,未在test2的發現,切換到LEFT JOIN代替只是JOIN