几个内连接产生太多行

时间:2011-03-14 18:24:52

标签: sql-server-2005 join

我正在为学区设计实地考察软件。

每次实地考察都附有一个帐号,将收取费用。它还将具有一个或多个驾驶员/车辆组合以及与每个驾驶员/车辆组合相关联的里程和驾驶员费率。

我正在制作一份会计报告,该帐户报告将按帐户显示分配给该帐户的行程计数,该帐户所行驶的里程总数乘以特定费用,以及总帐数每个司机在这次旅行中驾驶的时数乘以他们的支付率。

我有两辆车和两个司机的实地考察(tripid = 1),我期待两排输出。但是,我得到了4行;用于车辆81的两行和用于车辆56的两行。在我的连接中是否存在导致输出太多行的东西?

在我的查询输出中,Mister Driver在两辆车上都是奇怪的,Generic Person也是如此。

select distinct
       tdv.tripid as tripid,
       ta.name as account,
       cb.chargebasisname as trip_type,
       cb.defaultdistancerate as distance_rate,
       (tc.odometerreturn-tc.odometerstart) as total_miles,
       datediff(hour, tc.actualoriginstarttime,tc.actualoriginreturntime) as total_hours,
       v.vehicle,
       pr.hourlyrate as driver_rate,
       e.firstname+' '+e.lastname as driver

from trip_tripdrivervehicle tdv

join trip_tripinformation ti
on ti.recordid = tdv.tripid

join trip_transportationaccounts ta
on ta.recordid = ti.accountid

join trip_invoicechargebasis cb
on cb.recordid = ta.defaultchargebasisid

join trip_tripcompletion tc
on tc.tripid = ti.recordid

join vehicles v
on v.recordid = tc.vehicleid

join trip_employeejobcategorypayrate pr
on pr.employeeid = tdv.driverid

join employees e
on e.recordid = tdv.driverid

where ti.triprequeststatusid = 7 and ti.recordid = 1

这是我的输出:

https://lh6.googleusercontent.com/_Bbr20KcwLyw/TX5cwDhr7BI/AAAAAAAAbYE/qCfQtk6Xmeg/s800/sql_results.jpg

1 个答案:

答案 0 :(得分:1)

看起来你还有两个与JOIN相匹配的表trip_tripcompletion - 一个给出总里程为10的行,另一个给出总行数为50的行。

因此每个驱动程序都会显示每个total_miles选项。

可能需要更改此表的JOIN条件,或者您可以使用GROUP BYMAX/MIN来显示最短/最长的行程(取决于需要)。