SQLite CASE WHEN с> = оценкой - PullRequest
       16

SQLite CASE WHEN с> = оценкой

1 голос
/ 08 апреля 2019

Я пишу скрипт, который будет подсчитывать счет для настольной игры под названием Agricola.Следующий запрос работает:

SELECT
CASE $Fields WHEN 0 THEN -1
             WHEN 1 THEN -1
             WHEN 2 THEN 1
             WHEN 3 THEN 2
             WHEN 4 THEN 3             
END
;

Следующий запрос НЕ будет работать:

SELECT
CASE $Fields WHEN 0 THEN -1
             WHEN 1 THEN -1
             WHEN 2 THEN 1
             WHEN 3 THEN 2
             WHEN 4 THEN 3
             WHEN >= 5 THEN 4
END
;

Все, что я получаю, - это сообщение, в основном говорящее "error near '> =': синтаксическая ошибка",Как я могу представить этот блок WHEN> = 5 внутри этого оператора CASE?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Если вы используете альтернативную форму выражения CASE, вы можете использовать неравенства:

SELECT
    CASE WHEN $Fields = 0 THEN -1
         WHEN $Fields = 1 THEN -1
         WHEN $Fields = 2 THEN 1
         WHEN $Fields = 3 THEN 2
         WHEN $Fields = 4 THEN 3
         WHEN $Fields >= 5 THEN 4
    END;

Если вы хотите продолжать использовать форму CASE, один из вариантов здесь - заключить в кейс $Fields >= 5 условие ELSE. Это предполагает, что $Fields никогда не будет отрицательным. Предполагая это, вы можете попробовать:

SELECT
    CASE $Fields WHEN 0 THEN -1
                 WHEN 1 THEN -1
                 WHEN 2 THEN 1
                 WHEN 3 THEN 2
                 WHEN 4 THEN 3
                 ELSE 4
    END;
1 голос
/ 08 апреля 2019

CASE x будет оценивать только по отдельным значениям, вам нужно CASE WHEN x ..., вот так:

SELECT CASE
         WHEN $Fields >= 5 THEN 4
         WHEN $Fields = 4 THEN 3
         -- so on
       END
...