我在 ASP.NET MVC4 项目(使用 Visual Studio 2010)中使用 Reporting Service 来生成报告,并且我正在使用存储过程。我有一个可以属于人的表产品。这就是分配的概念。一个产品可以分配给不同的人(多对多关系),我在这两者之间有一个中间表:
我想要在报告中做的事情是显示与每个现有产品相关的信息,包括所有者。在这种情况下,我可以有两种所有者:公司(因此从未分配过产品或最后一次分配有 EndDate)或个人(因此最后一次分配没有 EndDate 或有“未来”结束日期)。
我知道所有这些验证都应该在我的报告模板中进行,但是对于 SQL 存储过程,我不知道如何获得每个产品的最后分配(如果有的话)。
欢迎任何可以提供帮助的想法。
编辑:更新查询
SELECT pr.SerialNumber, coalesce (p.LastName, 'US') as Owner
FROM bm_Products pr
LEFT OUTER JOIN
(Select Id_Person, Id_Product, max(ISNULL(EndDate,getdate()+1)) as MaxAllocDate
FROM bm_ProductAllocations a
WHERE EndDate > getdate()
group by Id_Person, Id_Product
having max(ISNULL(EndDate, getdate()+1)) =
(select max(isnull(EndDate, getdate()+1))
from bm_ProductAllocations where Id_Product = a.Id_Product)
) pa on pr.Id_Product = pa.Id_Product
LEFT OUTER JOIN bm_Persons p on pa.Id_Person = p.Id_Person
结果 :
SerialNumber Owner
-------------------------------------------------- --------------------------------------------------
78745148154815204 US
84512048150410522 US
84512841520415205 US
87451284512485120 US
56123051215215215 US
48512485487487856 US
CNU1510ZL0 US
8456656551521 US
4154854854151 US
4851205230047 US
4511120521050 US
84515151320541201 US
74161230326524165 US