Tsql WHERE子句中的T-SQL大小写

Tsql WHERE子句中的T-SQL大小写,tsql,Tsql,我有一个table value函数,它返回一个包含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.........20

我有一个table value函数,它返回一个包含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

有人能帮忙吗?

您可以使用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
您可以使用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