Несколько КОГДА внутри без выражения CASE в SQL? - PullRequest
3 голосов
/ 24 февраля 2009
    DECLARE @TestVal int
SET @TestVal = 5

SELECT
    CASE
        WHEN @TestVal <=3 THEN 'Top 3'
        ELSE 'Other'
    END

Я видел этот пример кода в Интернете, но я не смог найти пример, где не было выражения, и в нем было более одного WHEN, поэтому мне интересно, все ли в порядке с этим типом:

    DECLARE @TestVal int
SET @TestVal = 5

SELECT
    CASE
        WHEN @TestVal <=3 THEN 'Top 3'
                WHEN (select ...) = 1 THEN 'Other Value'
                WHEN (select ...) = 2 THEN 'Other Value 2'
        ELSE 'Other'
    END

Или мне нужно сказать CASE WHEN для каждой строки?

Ответы [ 3 ]

7 голосов
/ 24 февраля 2009

Да, это нормально, но я бы выстроил «WHEN» вертикально и объяснил бы это примерно так:

SELECT
    CASE
        WHEN @TestVal <=3  THEN 'Top 3'
        WHEN @TestVal <=10 THEN 'Top 10'
        WHEN @TestVAl <=25 THEN 'Top 25'
        ELSE 'Other'
    END

Форматирование может быть просто ошибкой уценки, но (select...) в вашем примере усложняет то, что должно быть более простым фрагментом.

5 голосов
/ 24 февраля 2009

Дело принимает следующую форму

CASE WHEN Condition THEN Result
     WHEN Condition2 THEN Result2
ELSE Default
END

Редактировать

Предполагается, что при использовании Microsoft SQL Server другие СУБД могут отличаться

0 голосов
/ 12 апреля 2013
    SELECT
       CASE
          WHEN @TestVal <=3  THEN 'Top 3'
          WHEN @TestVal <=10 THEN 'Top 10'
          WHEN @TestVAl <=25 THEN 'Top 25'
          ELSE 'Other'
       END

В отношении вложенных операторов case это также может быть сделано (до 10 вложенных операторов case в SQL)

http://msdn.microsoft.com/en-us/library/ms181765.aspx

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