SQLite CASE WHEN with> = evaluation

问题描述 投票:0回答:2

我正在编写一个脚本,用于计算名为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
;

我得到的只是一条消息,主要是说“错误接近'> =':语法错误”。如何在CASE语句中表示WHEN> = 5块?

sqlite case-when
2个回答
2
投票

如果您使用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
投票

CASE x只评估单个值,你需要CASE WHEN x ...,如下:

SELECT CASE
         WHEN $Fields >= 5 THEN 4
         WHEN $Fields = 4 THEN 3
         -- so on
       END
© www.soinside.com 2019 - 2024. All rights reserved.