我需要在我们的一个存储过程中应用某些逻辑。
我们在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提供语法错误。什么是符合我要求的解决方案?
感谢您的帮助
答案 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
值相结合