Sql server 2005 几个内部联接产生的行太多

Sql server 2005 几个内部联接产生的行太多,sql-server-2005,join,Sql Server 2005,Join,我正在为学区开发一个实地考察申请软件 每次实地考察都会附带一个账户,该账户将收取费用。它还将具有一个或多个驾驶员/车辆组合以及与每个驾驶员/车辆组合相关的里程和驾驶员费率 我正在编写一份会计报告,该报告将按帐户显示分配给该帐户的行程数,该帐户上行驶的总英里数乘以某个收费基础,以及每个驾驶员在该行程中行驶的总小时数乘以他们的工资率 我有一次实地考察(tripid=1),有两辆车和两名司机,我希望有两行输出。然而,我得到了4行;两排用于车辆81,两排用于车辆56。我的联接中是否有导致输出太多行的内容

我正在为学区开发一个实地考察申请软件

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

我正在编写一份会计报告,该报告将按帐户显示分配给该帐户的行程数,该帐户上行驶的总英里数乘以某个收费基础,以及每个驾驶员在该行程中行驶的总小时数乘以他们的工资率

我有一次实地考察(tripid=1),有两辆车和两名司机,我希望有两行输出。然而,我得到了4行;两排用于车辆81,两排用于车辆56。我的联接中是否有导致输出太多行的内容

奇怪的是,在我的查询输出中,司机先生和普通人都在两辆车上

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
以下是我的输出:


看起来您还有两个与表连接的匹配项
trip\u trip completion
——一个给出总英里数为10的行,另一个给出总英里数为50的行

所以每个司机都会带着每个总里程选项出现


此表的连接条件可能需要更改,或者您可以使用
GROUP BY
MAX/MIN
仅显示最短/最长行程(取决于需要).

看起来您还有两个与表连接的匹配项
trip\u trip completion
——一个给出总英里数为10的行,另一个给出总英里数为50的行

所以每个司机都会带着每个总里程选项出现


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

Galz,感谢您的提示。如何使用trip_tripcompletion调整连接以仅显示所需结果?我尝试了一个外部联接,但结果仍然显示出4行,而不是所需的2行。我已经制作了一张图片,显示了我在这里寻找的结果:@JJBladester-我需要更多的信息:50英里的旅程与司机先生有什么关系,10英里的旅程与普通人有什么关系?
trip\u trip completion
中是否有与驾驶员相关的列?如果没有,为什么您希望得到这个输出而不是相反的输出?(普通人50英里,司机先生10英里?)在你的帮助下解决了。我修改后的代码如下。现在我需要计算每个账户的实地考察次数。我需要一个不同的计数,因此如果TripID为一个帐户显示多次,它应该只按如下方式计数一次:内部连接trip\u TripDriverHicle tdv on tdv.TripID=ti.recordid和tdv.vehicleID=v.recordid,因此,您可以看到修复是“and tdv.vehicleID=v.recordid”一段,以向连接添加额外的限制。Galz,谢谢你的提示。如何使用trip_tripcompletion调整连接以仅显示所需结果?我尝试了一个外部联接,但结果仍然显示出4行,而不是所需的2行。我已经制作了一张图片,显示了我在这里寻找的结果:@JJBladester-我需要更多的信息:50英里的旅程与司机先生有什么关系,10英里的旅程与普通人有什么关系?
trip\u trip completion
中是否有与驾驶员相关的列?如果没有,为什么您希望得到这个输出而不是相反的输出?(普通人50英里,司机先生10英里?)在你的帮助下解决了。我修改后的代码如下。现在我需要计算每个账户的实地考察次数。我需要一个不同的计数,因此如果TripID为一个帐户显示多次,它应该只按如下方式计数一次:内部连接trip\u TripDriverHicle tdv on tdv.TripID=ti.recordid和tdv.vehicleID=v.recordid,因此,您可以看到修复是“and tdv.vehicleID=v.recordid”的一部分,以便为连接添加额外的限制。