sql server 2005和.net查询

sql server 2005和.net查询,.net,sql-server-2005,.net,Sql Server 2005,首先,我将解释表格的概念。。 我有三张桌子,A、B和C 表A包含旧的和新的许可证号码以及驾驶员更改新许可证的日期 表A包含 fdate | oldLicense (varchar) | newLicense (varchar) 12/14/2013 4:16:16 PM | 2 | 3 表B记录了驾照号码和汽车ID,以及他们使用汽车的第一天。请注意,2013年12月14日,插入了一个

首先,我将解释表格的概念。。 我有三张桌子,A、B和C

表A包含旧的和新的许可证号码以及驾驶员更改新许可证的日期

表A包含

fdate                      |   oldLicense (varchar)  |  newLicense  (varchar)  
12/14/2013 4:16:16 PM      |   2                     |  3
表B记录了驾照号码和汽车ID,以及他们使用汽车的第一天。请注意,2013年12月14日,插入了一个新的驾照号码,这意味着由于旧驾照不能再驾驶或已经死亡,驾驶人在汽车上被更换

表B包含

ID_Car    |    licenseNumber  | fDate
44        |    2              | 12/9/2013 4:16:16 AM   
44        |    3              | 12/14/2013 4:16:16 PM 
表C是对汽车进行的保养。请注意,它有日期,它应该反映驱动程序更改的时间。例如,2013年9月12日,驾照仍然是2张,2013年15月12日,驾照已经是3张

表C包含

Invoice   |   ID_Car   |   fDate
00989     |   44       |   12/9/2013 5:00:00 AM
10100     |   44       |   12/9/2013 6:00:00 AM
32323     |   44       |   12/15/2013 12:00:00 AM
期望输出:

到目前为止,我尝试的是:

SELECT B.fInvoice, C.fLicenseNew 
FROM tblCarFranchise A
LEFT JOIN tblCarMaintenance B ON A.ID_Car = B.ID_Car
LEFT JOIN tblTaxiDriversRelation C ON A.fLicenseNumber = C.fLicenseNew
输出:

00989     |  NULL  
10100     |  NULL
32323     |  NULL
00989     |  3  
10100     |  3
32323     |  3
我真的不知道该如何开始,这可能是迄今为止我遇到的最复杂的查询,而且这些行以某种方式被复制了总共6行,而不是3行

救命

更新: @感谢Szymon thnx的帮助,也感谢kumarch1 在图像上,问题的许可证号222333=2,13213113=3

将数据保存在临时模板中,从临时表中检索数据时不允许使用null

Select temp.fInvoice ,temp.fLicenseNew from( SELECT B.fInvoice as fInvoice , C.fLicenseNew as  fLicenseNew 
FROM tblCarFranchise A
LEFT JOIN tblCarMaintenance B ON A.ID_Car = B.ID_Car
LEFT JOIN tblTaxiDriversRelation C ON A.fLicenseNumber = C.fLicenseNew) temp
where temp.fLicenseNew != null

澄清后,这将是您的问题。它根据日期查找许可证的更改

select C.fInvoice, B.fLicenseNumber 
from tblCarMaintenance C
inner join tblCarFranchise B
on C.ID_Car = B.ID_Car
and C.fDate >= B.fdate
and C.fDate < isnull((select top 1 fDate from tblCarFranchise M where M.fdate > B.fdate
              and M.ID_Car = B.ID_Car), '20991231')

勾选下面定义的答案你能告诉我“20991231”在查询中的含义吗?日期在遥远的将来。我正在匹配许可证变更之间的发票,这是我如何找到上一个许可证的,它位于上一个变更和2099年之间。哦,好的,谢谢:它正在处理小提琴,但我仍然在调整代码,以便在sql server和我的代码上工作。我一得到答案就把它标出来:我已经编辑过这个问题了。。非常感谢你的帮助,很抱歉给你添麻烦。。我已经突出显示了使用的字段:更新了答案。我错误地认为执照是连续的。现在我根据日期进行比较。删除一些你的评论,让我们清理一下帖子。
select C.fInvoice, B.fLicenseNumber 
from tblCarMaintenance C
inner join tblCarFranchise B
on C.ID_Car = B.ID_Car
and C.fDate >= B.fdate
and C.fDate < isnull((select top 1 fDate from tblCarFranchise M where M.fdate > B.fdate
              and M.ID_Car = B.ID_Car), '20991231')