如何在Sql-Server

时间:2015-10-19 09:48:14

标签: sql sql-server sql-server-2008

我是数据库新手。检查Sql Fiddle。目前我获得的列数多于我需要的数量(检查小提琴输出)。

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 ║
╚════════╩════════════╩═════════════╩════════════════╝

2 个答案:

答案 0 :(得分: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 :(得分: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

如果您还想在test2中找不到test1电子邮件/日期的结果,请切换到LEFT JOIN而不只是JOIN

相关问题