我尝试在mysql中使用IN' CASE WHEN'条件

时间:2015-11-09 15:28:48

标签: mysql sql case conditional-statements

您好我在尝试达到3的值时遇到问题,因为我的查询无法识别使用条款' IN'

选择两个国家/地区

a)这是我的简单表源:

id |国家

1 | CL

2 | BR

b)这是我的SQL查询:

SELECT
(
CASE 
    WHEN country ='CL' THEN 1
    WHEN country = 'BR' THEN 2
    WHEN country IN ('BR','CL') THEN 3
    ELSE 0
END) AS result 
FROM countries 
WHERE country IN ('BR','CL') ;

c)这是当前的输出结果:

结果

1

2

3 个答案:

答案 0 :(得分:0)

CASE ... END expression使用快捷键评估:

CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
     

第一个版本返回value = compare_value的结果。该   第二个版本返回第一个条件的结果   真即可。如果没有匹配的结果值,则ELSE后的结果为   返回,如果没有ELSE部分,则返回NULL。

答案 1 :(得分:0)

您似乎想要以下内容:

// Update Qml file
Text
{
    id: text1
    text: "Initial"
    objectName: id
} 

// Find text1 in c++
QObject * o1 = root->findChild<QObject *>(QStringLiteral("text1"));
QQuickItem *text1 = qobject_cast<QQuickItem*>(o1);

// Set property
text1->setProperty("text", QVariant());

SELECT CASE WHEN cntAll = 2 THEN 3 WHEN cntCL >= 1 THEN 1 WHEN cntBR >= 1 THEN 2 ELSE 0 END AS result FROM ( SELECT COUNT(DISTINCT country) AS cntAll, COUNT(CASE WHEN country = 'CL' THEN 1 END) AS cntCL, COUNT(CASE WHEN country = 'BR' THEN 1 END) AS cntBR FROM countries WHERE country IN ('CL', 'BR')) AS t 表中存在 ('CL', 'BR')值时,输出为countries,否则如果仅存在3,则输出为{ {1}},否则如果仅显示'CL',则输出为1,否则输出为'BR'

答案 2 :(得分:0)

您输入查询的逻辑设计不合理! 首先,您需要连接country字段然后放入case表达式。

从国家/地区选择GROUP_CONCAT(国家/地区)

您将获得以下结果&#34; BR,CL,... &#34;

然后你把案例表达式放在那样:

选择 如果&#39;%CL%&#39;那么1

结果如&#39;%BR%&#39;那么2      当结果像&#39;%BR%&#39;和结果像'%CL%&#39;然后3       否则0 从 (从国家/地区选择GROUP_CONCAT(国家/地区))