2015-04-22 55 views
3

我需要得到一個選擇查詢根據某些條件如何使用case語句的SQL內選擇查詢

手段if(id=uid) 然後我需要下面的查詢

select * from table1 where id=5; 

其他 我輸出需要下面的一個

select * from table1 where id=10 

我知道我可以使用,如果條件這一點。但我的查詢是很長的一個,所以當我使用的if else那麼它看起來像

if(@[email protected]) 
begin 
select * from table1 where id=5;// query 1 
end 
else 
select * from table1 where id=10;//query 2 

但在這裏,我要再次對單個檢查更換整個查詢。我希望我可以做這樣的事情:

declare @id int=4; 
declare @uid=10; 

select * from table1 where 
case 
when @[email protected] 
then 
id=5 
else 
id=10; 
end 

更新用

我需要一個條件太

在這種情況下,ID = 5和uid = 10

then if(id=uid) 

然後

select * from table1 where id=5 

if(id!=uid) 

然後

select * from table1 

像這樣

回答

7

可以使用case表達式返回值id應該等於:

SELECT * 
FROM table1 
WHERE id = CASE WHEN @id = @uid THEN 5 ELSE 10 END; 

編輯:

的問題更新的要求是當@id != @uid返回所有行。這可以通過比較idid進行:

SELECT * 
FROM table1 
WHERE id = CASE WHEN @id = @uid THEN 5 ELSE id END; 

另外,與此更新的要求,簡單or表達可能是簡單的使用:

SELECT * 
FROM table1 
WHERE @id = @uid OR id = 5; 
+0

完美的事情的答案..我需要更多的幫助太..我如何選擇當id = uid然後id = 5和當id!= uid然後選擇*從表1中明智喜歡 –

+0

@ArunprasanthKV我不下站在你的意思是「當id!= uid,然後從table1中選擇*就像聰明」。你能澄清一下嗎? – Mureinik

+0

是相信我可以更新我的問題 –

2
SELECT 
    * 
FROM 
    table1 
WHERE 
(
    @id = @uid 
    AND 
    id =5 
) 
OR 
(
    not @id = @uid 
    AND 
    id=10 
) 
+0

感謝您的重播 –

2
SELECT * FROM table1 
WHERE (id=5 AND @[email protected]) OR (id=10 AND @id<>@uid) 
+0

感謝您的重播 –

+0

你能幫我解決我更新的問題嗎 –