Помогите с построением условного оператора SQL - PullRequest
1 голос
/ 21 мая 2010

Я хочу построить оператор SELECT с условным IF.

Например, если нет записей с кодом языка 'Swedish':

SELECT * FROM Entries WHERE Language = 'Swedish'

ТО пользуйтесь 'English'

SELECT * FROM Entries WHERE Language = 'English'

Как бы я построил это утверждение, используя MSSQL?

Спасибо

Stefan

Ответы [ 6 ]

5 голосов
/ 21 мая 2010

Наивно:

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' 
        )
    )
3 голосов
/ 21 мая 2010

Другой метод:

Select Top 1 *
From   Entries
Where  Language In ('Swedish', 'English')
Order By Case When Language = 'Swedish' Then 1 Else 2 End
1 голос
/ 21 мая 2010

Есть много способов сделать это, если вы хотите просто настроить базовый оператор, вот хороший.

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'

Надеюсь, я немного помог вместе с другими отличными ответами выше!

1 голос
/ 21 мая 2010

вы можете написать хранимую процедуру для этого и использовать ее из своего кода, что-то вроде

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

посмотрите этот пример

, надеюсь, это поможет.

0 голосов
/ 22 мая 2010
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 
)
0 голосов
/ 21 мая 2010

Если существует (выберите 1 из записей, где Language = 'Swedish') Тогда Начать ВЫБЕРИТЕ * ИЗ ЗАПИСЕЙ, ГДЕ Язык = 'шведский' Конец еще Начать Выберите * из записей, где Language = 'Language' Конец

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...