2015-10-19 25 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