我需要在我們的某個存儲過程中應用某些邏輯。基於Sql server中的輸入參數的用例聲明
我們在sp中有一個參數@season
。
如果@season
= 0,那麼我有整整一年的預算價值。
如果@season
= 1,則我必須採取稅季預算值
如果@season
= 2,則我必須採取季前預算值。
我得出每個賽季 的開始日期和結束日期爲@SeasonStrt
,@SeasonEnd
@SeasonStart
是從1月1日至四月30日和@SeasonEnd
從五月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服務器給出語法錯誤。什麼是符合我要求的解決方案?
感謝您的幫助
您需要在告訴我們更精確的結合您的條件是什麼3個不同的日曆是因爲我們不知道您的業務規則。也許只是給我們提供每個賽季開始和結束日期的樣本?那麼我們可以幫助將其轉換爲T-SQL –
請提供架構和示例數據,或者更好的SQLFiddle。 –
CASE返回一個值,這是因爲它正在選擇返回一列。該錯誤是由於SQL期望類似於value = case ...您可以在沒有case語句的情況下重寫WHERE或將其更改爲 – jean