我在ASP.NET MVC4项目(使用Visual Studio 2010)中使用Reporting Service来生成报告,并使用存储过程。我有一张桌子产品它可以属于人。这就是分配的概念。产品可以被分配给不同的人(多到许多关系),我有这两个之间的中间表:SQL - 使用报告服务进行报告的存储过程
我想TOT我的报告做的事情是,以显示相关信息包括所有者在内的每个现有产品。在这种情况下,我可以有两种类型的所有者:公司(因此产品从未分配过或最后分配有一个EndDate)或一个人(因此最后一次分配没有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
感谢您的帮助。事实上,在我的数据库中,我所有的表都以“bm_”开头,因此我试图根据需要调整查询。无论如何,当我想测试执行它时,我遇到了一个错误:没有为'pa'的列3指定列名。你有好主意吗?再次感谢 ! – Traffy 2013-05-03 07:17:39
子查询必须具有所有字段的字段名称。我忘记了最大分配日期的别名。上面编辑。让我知道这是如何解决的 – 2013-05-03 17:03:35
感谢您的修改,现在查询可以毫无问题地执行。无论如何,对于我所有的产品,我得到“美国”作为所有者,这意味着该产品没有分配或最后的分配已完成...编辑以让您知道我有什么。再次感谢 ! – Traffy 2013-05-04 08:17:20