2012-11-19 58 views
0

我有一個有趣的問題。我將寫一個標量值函數。其中一個參數不在表格列中。我必須在where子句中使用此參數(@ImpUrgPri)。至於該參數,表中存在列的條件。你能幫我解答嗎?CASE什麼時候在哪裏條款?

DECLARE @ImpUrgPri NVARCHAR(3) 
SET @ImpUrgPri = 'URG' 
DECLARE @Enum INT 
SET @Enum = 0 

select COUNT(*) 
from zODYA_vwCallReq_AllData 
where ActiveFlag = 1 
AND 
(CASE WHEN (@ImpUrgPri = 'PRI') THEN Priority_Enum == @Enum 
     WHEN (@ImpUrgPri = 'URG') THEN Urgency_Enum == @Enum 
     WHEN (@ImpUrgPri = 'IMP') THEN Impact_Enum == @Enum END) 

group by 
(CASE WHEN (@ImpUrgPri = 'PRI') THEN Priority_Enum 
     WHEN (@ImpUrgPri = 'URG') THEN Urgency_Enum 
     WHEN (@ImpUrgPri = 'IMP') THEN Impact_Enum END) 
+1

你已經擁有的代碼,什麼是你的問題? – deerchao

+0

該代碼返回「不正確的語法附近」錯誤的情況下,當在塊的where子句。 – juniorDev

回答

1

你的選擇可能是因爲:

select COUNT(*) 
from zODYA_vwCallReq_AllData 
where ActiveFlag = 1 
AND @Enum = (CASE WHEN (@ImpUrgPri = 'PRI') THEN Priority_Enum 
      WHEN (@ImpUrgPri = 'URG') THEN Urgency_Enum 
      WHEN (@ImpUrgPri = 'IMP') THEN Impact_Enum END) 

group by 
(CASE WHEN (@ImpUrgPri = 'PRI') THEN Priority_Enum 
     WHEN (@ImpUrgPri = 'URG') THEN Urgency_Enum 
     WHEN (@ImpUrgPri = 'IMP') THEN Impact_Enum END) 
+0

這對我很有幫助。謝謝。 – juniorDev

0

我認爲這將是最好使用IF,並有三種不同的SELECT S,爲每個「時」的情況。

您也可以動態地創建SQL(在存儲過程中),這會使存儲過程稍微短一些。在這裏只有三個選項,我會堅持3個選擇。

0
DECLARE @ImpUrgPri NVARCHAR(3) 
SET @ImpUrgPri = 'URG' 
DECLARE @Enum INT 
SET @Enum = 0 

select COUNT(*) 
from zODYA_vwCallReq_AllData 
where ActiveFlag = 1 
AND 
(CASE @ImpUrgPri 
    WHEN 'PRI' THEN Priority_Enum 
    WHEN 'URG' THEN Urgency_Enum 
    WHEN 'IMP' THEN Impact_Enum 
END) = @Enum 
group by 
(CASE @ImpUrgPri 
    WHEN 'PRI' THEN Priority_Enum 
    WHEN 'URG' THEN Urgency_Enum 
    WHEN 'IMP' THEN Impact_Enum 
END)