我有一个表值函数,它返回一个包含5列的表,这些列按Sales DESC排序。
Item.Count..Year...Month....Sales............ID
808.........2010.....7......212282.88........1
699.........2011.....7......179029.45........2
829.........2007.....7......135034.52........3
959.........2005.....7......129611.80........4
861.........2006.....7......104667.57........5
我要做的是获得第二大销售额。我能做到的。但是,业务逻辑表明,如果第二大销售额的年份与当前年度(2011年)相同,则获得下一个销售价值(135034.52)。
这就是我所拥有的:
DECLARE @Sales DECIMAL(14, 2) = 179029.45
SELECT *
FROM dbo.fnGetDate(181, '08-01-2011')
WHERE ID =
CASE WHEN Sales = @Sales AND Year = YEAR(DATEADD(M, -1, '08-01-2011'))
THEN 3 ELSE 2 END
不幸的是,这并不是应该的方式。如果我更改@Sales中的值,它可以工作(即179029.44)。
任何人都可以帮忙吗?
答案 0 :(得分:4)
您可以使用row_number
按销售数对每一行进行编号,并使用where
子句排除第二行(如果是来自今年):
SELECT TOP 1 *
FROM (
SELECT row_number() over (order by Sales desc) as rn
, *
FROM dbo.fnGetDate(181, '08-01-2011')
) as SubQuery
WHERE (rn >= 2 and datepart(year, getdate()) <> SubQuery.year)
or rn >= 3
ORDER BY
rn