Mysql 基于字段中的某些值获取值的SQL查询

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

我有一个MySQL数据库,它有一个名为generations的表,表的结构如下


我想在十代有值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
是一个问题,以后对该问题的编辑将使我的回答无效。