2010-05-21 85 views
1

我想用條件IF構造一個SELECT語句。幫助構建條件SQL語句

一樣,如果用語言代碼'Swedish'無記錄:

SELECT * FROM Entries WHERE Language = 'Swedish' 

然後用'English'

SELECT * FROM Entries WHERE Language = 'English' 

我將如何構建使用MSSQL這種說法?

感謝,

斯特凡

+0

如果語言被編入索引,它可能更容易,並且同樣快速地檢查瑞典語是否存在於單獨的語句中。 – extraneon 2010-05-21 17:48:45

回答

5

天真:

SELECT * 
FROM Entries 
WHERE Language = 'Swedish' 

UNION ALL 

SELECT * 
FROM Entries 
WHERE Language = 'English' 
    AND NOT EXISTS (
     SELECT * 
     FROM Entries 
     WHERE Language = 'Swedish' 
    ) 

或:

SELECT * 
FROM Entries 
WHERE Language = 'Swedish' 
    OR (Language = 'English' 
     AND NOT EXISTS (
      SELECT * 
      FROM Entries 
      WHERE Language = 'Swedish' 
     ) 
    ) 
+0

+1第二種選擇是我在發佈時寫的內容。 =) – 2010-05-21 17:55:48

+0

非常感謝,它效果很好! – unitario 2010-05-23 18:00:28

1

你可以寫一個存儲過程,這和從您的代碼,類似使用

select count(*) into V from entries where language='Swedish' 
IF (v>0) 
// use swedish 
else 
// use english 

看到這個example

希望這會有所幫助。

+0

更新:如果要在一個查詢中進行分組並且不使用存儲過程,則Cade Roux的方法會更好。 – Youssef 2010-05-21 17:57:02

+0

你的'count(*)到V'和'IF(v> 0)'在tsql中是無效的。另外一個簡單的'IF EIXSTS(SELECT 1 FROM from entries where language ='Swedish')'將比用COUNT(*)'實際將它們計算到變量中然後對該變量做一個IF快得多。 – 2010-05-21 18:10:21

+0

你是對的,我只是想給一個方法來跟着代碼沒有測試過,我不使用SQL SERVER。 和「選擇1從」是一個偉大的提示謝謝。 – Youssef 2010-05-21 18:40:24

3

另一種方法:

Select Top 1 * 
From Entries 
Where Language In ('Swedish', 'English') 
Order By Case When Language = 'Swedish' Then 1 Else 2 End 
0

如果不存在(選擇1從條目其中language = '瑞典')然後 開始 SELECT * FROM項其中language = '瑞典' 結束 否則 開始 選擇*從語言=「語言」的條目 結束

1

如果您想在此設置基本語句,有很多方法可以做到這一點。

IF (SELECT count(*) FROM entries WHERE language = 'english') > 0 
BEGIN 
    //What you want to do for english 
END 
ELSE IF (SELECT count(*) FROM entries WHERE language = 'swedish') > 0 
BEGIN 
    // What you want to do for Swedish 
END 
ELSE 
BEGIN 
    // There are no records for those languages!! 
END 

如果你想使用它作爲一個存儲過程可以嘗試以下方法:

CREATE PROCEDURE GetLanguageRows 
    @language varchar(500) 
AS 

IF (SELECT count(*) FROM entries WHERE language = @language) > 0 
BEGIN 
    //What you want to do for that language 
END 
ELSE 
BEGIN 
    // No records found! 
END 

現在你可以使用

exec GetLanguageRows 'English' 

希望我幫助了一個小旁邊的其他偉大上面的答案!

+0

謝謝你,這實際上解決了我正在處理的另一個問題! – unitario 2010-05-23 18:03:23

+0

你的歡迎:) – Darxval 2010-05-27 15:03:40

0
SELECT * FROM Entries AS e WHERE Language IN('Swedish','English') 
    AND NOT EXISTS(
    SELECT * FROM Entries AS e1 WHERE Language IN('Swedish','English') 
     AND e.Language > e1.Language 
)