2017-09-28 154 views
0

我需要做類似的東西:SQL服務器情況下檢測等於或不等於條件(互斥)

select * from table1 where type case @param when 1 then EQUAL else NOT EQUAL end 3 

選擇所有類型= 3或類型<> 3,取決於PARAM。 Considere大的選擇涉及到很多的表.... 的想法是不一樣複製上選擇「聯盟」

select * from table1 where type = 3 and @param =1 
UNION 
select * from table1 where type <> 3 and @param <> 1 

是否有可能兩面?

+0

你可以給一些樣本數據和預期的結果 – GuidoG

回答

0

也許這樣?

select * 
from table1 
where 
    ((@param=1) and (type=3)) 
or 
    ((@param<>1) and (type<>3)) 
0
SELECT * 
FROM table1 
WHERE 
    type = 3 AND @param = 1 
    OR type <> 3 AND @param <> 1 

使用SELECT DISTINCT *如果您需要,沒有任何重複的結果集。

+0

這不會沒有括號,(我認爲)不需要DISTINCT – MtwStark

+0

沒有括號,它會工作正常,'DISTINCT'是鏡像使用'UNION'在這個問題上,雖然我也無法分辨這是否是一項要求。 –

+0

我認爲OP沒有意識到UNION和UNION ALL之間的差異,並且沒有括號的混合AND/OR會導致不希望的結果,在這種情況下,結果是所有記錄都會返回或者可能沒有結果 – MtwStark