2017-05-16 79 views
-2
(case when @InAct = 1 then (pck.packageID = (select pa.packageID from PakacgeTb pa where (pck.packageID = pa.packageID) 

and 

((cast(pck.expirydate as date) > cast(getdate() as date)) and cast(pck.BalanceVisit as decimal) > cast(0.00 as decimal))))) 

我想使用where case條件我不知道如何使用它。整個代碼在where條件之後使用。案例條件

+0

您沒有END CASE語句。你也真的沒有開始正確的。 –

+0

請提供完整的陳述和遇到的錯誤 –

+0

以及即使我做他們會顯示錯誤 – rinki

回答

0

您可以CASE表達複合條件轉換成WHERE條款一樣

where (@InAct = 1 or @InAct is null) 
and pck.packageID in (select pa.packageID 
         from PakacgeTb pa) 
and 
((cast(pck.expirydate as date) > cast(getdate() as date)) 
and cast(pck.BalanceVisit as decimal) > cast(0.00 as decimal)))) 
+0

我喜歡的方法,但我如何檢查條件說@InAct = 1,如果它爲空然後..那就是爲什麼我使用案例條件..? – rinki

+0

@rinki,使用'coalesce()'函數......如果有幫助,請參閱編輯答案。 – Rahul

+0

可以說我想避免這種情況下使用@InAct作爲null,並使用一些其他的條件,條件 – rinki

0

案例的簡單結構

select 
CASE when ISNULL(pa.[packageID],1) = 1 then 'do something' 
else 'do something' 
end 
from PakacgeTb pa 

你必須使用然後條件。見下文。

and (CASE when coalesce(@InAct,1) = 1 and pck.packageID in (select 
pa.packageID from PakacgeTb pa) and ((cast(pck.expirydate as date) > 
cast(getdate() as date)) and cast(pck.BalanceVisit as decimal) > cast(0.00 
as decimal)) 

then 'do something' 

else 'this will only execute if when condition does not satisfy' 

end 
+0

和(CASE當合並(@ InAct,1)= 1和pck.packageID(從PakacgeTb pa選擇pa.packageID)和((cast(pck.expirydate作爲日期)> cast(getdate()as date ))和cast(pck.BalanceVisit作爲十進制)> cast(0.00作爲十進制))else @InAct爲null結束)...像這種類型我想 – rinki

+0

在這裏你沒有使用**然後**。 – Azhar

+0

'和(CASE合併(@ InAct,1)= 1和pck.packageID(從PakacgeTb pa選擇pa.packageID)和((cast(pck.expirydate as date)> cast(getdate()as date))並投(pck.BalanceVisit爲十進制)>投(0.00爲十進制)) 然後做某些事情「 其他 end' – Azhar