伙计们你知道如何解决这个问题吗?
我撞到了一堵砖墙。我在报告后面编写代码。报告必须根据Colour
变量显示FinancialYear
。
这是一个表格示例:
CompanyID | StartDate | EndDate | ReviewDate | FinancialYear | Colour
46 | 2012-01-18 | 2013-12-17 | 2013-12-15 | 2012 | Red
46 | 2013-12-17 | 1900-01-01 | 2017-03-10 | 2014 | Red
46 | 2011-05-11 | 2012-01-17 | 2011-06-30 | 2014 | Orange
当变量FinancialYear
为2016
时,CompanyID
应显示Colour Red
,EndDate
为''
结果应显示第n行2
。
但是,如果FinancialYear
变量为2012
,我有两行符合条件,需要选择较大的EndDate
或StartDate
,{ {1}}。
结果应显示第1行。
有人会知道怎么做吗?感谢您的任何反馈!
到目前为止我已尝试过:
Reviewdate
答案 0 :(得分:0)
如果您只是在一行之后,那么您需要订购数据集,然后select top 1
。您可以通过添加或删除字段并使用order by
指定降序(默认为升序)来更改desc
子句中数据集的排序方式:
declare @t table (CompanyID int
,StartDate date
,EndDate date
,ReviewDate date
,FinancialYear int
,Colour nvarchar(50)
);
insert into @t values
(46,'20120118','20131217','20131215',2012,'Red')
,(46,'20131217','19000101','20170310',2014,'Red')
,(46,'20110511','20120117','20110630',2014,'Orange');
declare @FinancialYear int = 2012;
select top 1 *
from @t
where FinancialYear = @FinancialYear
order by case when EndDate = '19000101' -- Because you want 1900-01-01 to be seen as 'most recent',
then '29990101' -- you need to replace it with a value way into the future.
else EndDate
end desc;