2012-09-25 79 views
0

我想運行以下查詢。 @city值將提供運行時間使用IF和其他條款和使用IN(在where條件字段)

Select * from Emp 
    where empno in (
     if(@city = 'Bangalore') 
      Begin 
       Select Empno from Emp 
        where EmpCity = @city 
      End 
     Else 
      Begin 
       Select empno from Emp 
     End 
    ) 

請幫我提供替代

+0

你的意思是說,當城市是'Banglore'獲取基於城市的數據,否則獲取總數據。 這個查詢本身就會正常工作 'if(@city ='Bangalore')開始從Emp中選擇Empno其中EmpCity = @city End Else Begin從Emp End中選擇empno' – Mourya

+0

其實我需要根據不同的變量獲取emp數據。在上面的例子中,我只提到了一個變量。如果它不止一個變量,那麼使用輪廓if&else將會有點困難。是否有任何其他替代方案使用IN與IF條件? –

+0

是否所有這些條件繼續只從原始「Emp」表中選擇行?你能否再添加一些例子 - 單個例子往往不會公開所有必需的細節。 –

回答

1

IF是控制流聲明。你不能在其他語句中放置語句。

當他們拿出IF時,人們正在尋找的常見事物是CASE,這是一個表達式。然而,在這種情況下,一個簡單得多的查詢似乎是可行的:

Select * from Emp 
where 
    (EmpCity = @city or @city != 'Bangalore') and 
    (EmpSalary = @salary or @salary != 20000) and 
    (Designation = @designation or @designation != 'PM') 

我不知道你爲什麼嵌套查詢所有

+0

好的。非常感謝你的幫助。讓我試着改變我的查詢的實際邏輯。如果我需要你的幫助,我會盡快回復你。 –

+0

我希望Empcity = @City或Empcity =所有城市的條件。 –

+0

@VenkateswarluAvula - 如果'Empcity = @City和@city ='bangalore'',條件將爲真。如果'@ city'不等於'Bangalore'(在這種情況下,'EmpCity'可以取任何值) - 這與您的問題中的條件相同,也是如此。 –

1

假設你的搜索是基於EmpId - @EmpIdCity - - @city

Select * 
from 
    Emp 
where 
(@city = '' or EmpCity = @city) and 
(@EmpId = '' or EmpId = @EmpId)