我想用條件IF構造一個SELECT語句。幫助構建條件SQL語句
一樣,如果用語言代碼'Swedish'
無記錄:
SELECT * FROM Entries WHERE Language = 'Swedish'
然後用'English'
SELECT * FROM Entries WHERE Language = 'English'
我將如何構建使用MSSQL這種說法?
感謝,
斯特凡
我想用條件IF構造一個SELECT語句。幫助構建條件SQL語句
一樣,如果用語言代碼'Swedish'
無記錄:
SELECT * FROM Entries WHERE Language = 'Swedish'
然後用'English'
SELECT * FROM Entries WHERE Language = 'English'
我將如何構建使用MSSQL這種說法?
感謝,
斯特凡
天真:
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'
)
)
+1第二種選擇是我在發佈時寫的內容。 =) – 2010-05-21 17:55:48
非常感謝,它效果很好! – unitario 2010-05-23 18:00:28
你可以寫一個存儲過程,這和從您的代碼,類似使用
select count(*) into V from entries where language='Swedish'
IF (v>0)
// use swedish
else
// use english
看到這個example
希望這會有所幫助。
更新:如果要在一個查詢中進行分組並且不使用存儲過程,則Cade Roux的方法會更好。 – Youssef 2010-05-21 17:57:02
你的'count(*)到V'和'IF(v> 0)'在tsql中是無效的。另外一個簡單的'IF EIXSTS(SELECT 1 FROM from entries where language ='Swedish')'將比用COUNT(*)'實際將它們計算到變量中然後對該變量做一個IF快得多。 – 2010-05-21 18:10:21
你是對的,我只是想給一個方法來跟着代碼沒有測試過,我不使用SQL SERVER。 和「選擇1從」是一個偉大的提示謝謝。 – Youssef 2010-05-21 18:40:24
另一種方法:
Select Top 1 *
From Entries
Where Language In ('Swedish', 'English')
Order By Case When Language = 'Swedish' Then 1 Else 2 End
如果不存在(選擇1從條目其中language = '瑞典')然後 開始 SELECT * FROM項其中language = '瑞典' 結束 否則 開始 選擇*從語言=「語言」的條目 結束
如果您想在此設置基本語句,有很多方法可以做到這一點。
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'
希望我幫助了一個小旁邊的其他偉大上面的答案!
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
)
如果語言被編入索引,它可能更容易,並且同樣快速地檢查瑞典語是否存在於單獨的語句中。 – extraneon 2010-05-21 17:48:45