用例语句基于Sql server中的输入参数

时间:2015-10-13 11:15:34

标签: sql sql-server tsql

我需要在我们的一个存储过程中应用某些逻辑。

我们在sp。

中有一个参数@season

如果@season = 0,那么我必须有整年的预算值。

如果@season = 1,那么我必须采用税季预算值

如果@season = 2,那么我必须采用季前预算值。

我获得了每个赛季的开始和结束日期 作为@SeasonStrt@SeasonEnd

@SeasonStart从1月1日到4月30日,@SeasonEnd从5月1日到12月30日

我尝试了类似下面的内容,

SELECT SUM(ISNULL(lab.BudgetAmt,0)), 
SUM(ISNULL(lab.ProjectedHours,0))  
FROM [dbo].[Budget] bud

WHERE  [Year] = @taxyear
AND ((@season = 0) OR (Season= @season))
        AND CASE WHEN @season in (1,2)
         THEN bud.[week]   >= CASE WHEN @season in (1,2)THEN @SeasonStrt ELSE bud.[week] END
         AND bud.[week]    <= CASE WHEN @season in (1,2)THEN @SeasonStrt ELSE bud.[week] END 

Sql server提供语法错误。什么是符合我要求的解决方案?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT SUM(ISNULL(lab.BudgetAmt,0)), 
SUM(ISNULL(lab.ProjectedHours,0))  
FROM [dbo].[Budget] bud
WHERE  [Year] = @taxyear
AND 
(
    ((@season = 0) AND (Season = @season))
    OR ((@season = 1) AND (bud.[week] >= @SeasonStrt))
    OR ((@season = 2) AND (bud.[week] <= @SeasonStrt))
)

所以,想法很简单:将您的条件与OR和特定@season值相结合