Mysql 基于字段中的某些值获取值的SQL查询
我有一个MySQL数据库,它有一个名为generations的表,表的结构如下Mysql 基于字段中的某些值获取值的SQL查询,mysql,sql,Mysql,Sql,我有一个MySQL数据库,它有一个名为generations的表,表的结构如下 我想在十代有值1时得到值10作为输出,否则它不会返回任何值,如果二十代有值1时得到值20作为输出,否则它不会返回任何值,如果三十代有值1时得到值30作为输出,否则它不会返回任何值。如果所有三个字段都有一个值1,则输出将为10、20、30,并且任务id将作为输入提供 当多个生成列为1时,不清楚您希望输出是什么,但一种解决方案是使用CASE语句: SELECT CASE WHEN ten_genera
我想在十代有值1时得到值10作为输出,否则它不会返回任何值,如果二十代有值1时得到值20作为输出,否则它不会返回任何值,如果三十代有值1时得到值30作为输出,否则它不会返回任何值。如果所有三个字段都有一个值1,则输出将为10、20、30,并且任务id将作为输入提供 当多个生成列为
1
时,不清楚您希望输出是什么,但一种解决方案是使用CASE
语句:
SELECT CASE
WHEN ten_generation = 1 THEN 10
WHEN twenty_generation = 1 THEN 20
WHEN thirty_generation = 1 THEN 30
ELSE NULL
END AS value
FROM generations
WHERE id = :your_id
如果要将其作为多个列,则:
SELECT CASE
WHEN ten_generation = 1
THEN 10
ELSE NULL
END AS ten_value,
CASE
WHEN twenty_generation = 1
THEN 20
ELSE NULL
END AS twenty_value,
CASE
WHEN thirty_generation = 1
THEN 30
ELSE NULL
END AS thirty_value
FROM generations
WHERE id = :your_id
如果只有二十次生成包含值1,则输出为20,如果二十次生成和十次生成包含值1,则输出为10,20
Oracle查询:
SELECT TRIM(
LEADING ',' FROM
CASE WHEN ten_generation = 1 THEN '10' END
|| CASE WHEN twenty_generation = 1 THEN ',20' END
|| CASE WHEN thirty_generation = 1 THEN ',30' END
) AS value
FROM generations
WHERE id = :your_id
对于MySQL,您将使用
CONCAT\u WS
:
select
concat_ws(',',
case when ten_generation = 1 then '10' end,
case when twenty_generation = 1 then '20' end,
case when thirty_generation = 1 then '30' end
) as result
from mytable
where task_id = 2;
我删除了不兼容的数据库标记。仅使用正在使用的数据库标记。另外,当所有条件都为真时,它会返回什么?请给出示例以及您期望的结果。你的说法自相矛盾。一个逻辑表会很有用。你说的“我想要得到值…”是什么意思?-“得到”是什么意思?您可能需要编写一个SELECT查询。输出中应该包含什么?任务id,然后是相同的三列,分别显示10、20或30,否则为空?或者还有什么?@JeffUK例如,如果只有二十代包含值1,则输出为20,如果二十代和十代包含值1,则输出为10,20,您的DBMS是什么?MySQL?SQL Server?神谕假设_generation列是布尔型的,那么在后一个示例中,您不需要case语句,只需输出十个_generation*10作为十个_值,二十个_generation*20作为二十个_值, etc@JeffUK问题是,如果任何字段没有值,它将返回null。例如,如果Tworth_生成没有值,它将返回Tworth_值作为null。声明的要求是“it will not return any value”,这听起来像是他想要null。难办sure@JeffUK在Oracle中没有空的
VARCHAR2
,而是NULL
——因此,如果没有值为“true”,Oracle查询将返回NULL
。在我看来,返回NULL
与请求“不返回任何值”匹配,他不想要“他想要NULL”。如果OP要求为零或为空,我同意NULL
是一个问题,以后对该问题的编辑将使我的回答无效。