Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在SQL中迭代CASE语句?_Mysql_Sql_Case - Fatal编程技术网

Mysql 如何在SQL中迭代CASE语句?

Mysql 如何在SQL中迭代CASE语句?,mysql,sql,case,Mysql,Sql,Case,我想在mySQL中编写一个查询,其形式如下: SELECT *, CASE WHEN <column name> = 1 THEN 1 ELSE 0 END as "column_1", CASE WHEN <column name> = 2 THEN 1 ELSE 0 END as "column_2", CASE WHEN <

我想在mySQL中编写一个查询,其形式如下:

SELECT *,
    CASE
        WHEN <column name> = 1  THEN 1
        ELSE 0
        END as "column_1",
    CASE
        WHEN <column name> = 2 THEN 1
        ELSE 0
        END as "column_2",
    CASE
        WHEN <column name> = 3 THEN 1
        ELSE 0
        END as "column_3"
    FROM <table name>;
选择*,
案例
当=1时,则为1
其他0
以“第1列”结尾,
案例
当=2时,则为1
其他0
以“第2列”结尾,
案例
当=3时,则为1
其他0
以“第3列”结尾
从…起

我想为大量案例(大约1000个案例)编写此查询,这样就创建了1000个满足上述条件的新列。如何在mySQL中迭代此过程,使我不必像上面那样手动编写每一行(只有3种情况)?

这可能不合适,但如果您可以使用一列输出(作为字符串而不是多列),那么您可能可以执行以下操作:

select t.id,
       group_concat( (case when t.column = v.value then '1' else '0' end) order by v.ordering) as string_flags
from (select 1 as ordering, 1 as value union all
      select 2, 2 union all
      . . .
     ) v cross join
     t
group by t.id;

这只是一个想法。性能是一个问题,但它也解决了行中最大列数的问题。

您可以在存储过程或外部脚本程序中进行迭代,以便为您动态编写SQL。编写完成后,您将执行动态创建的sql语句。使用任何手边的脚本语言生成上面的文本,MySql就可以了。稍微偏离主题:布尔表达式隐式计算为0或1,意思是
当=1时,则1 ELSE 0 END
可以简化为
=1
。另外,字段名通常由反勾号包围,而不是双引号。@jnevil:这是否可能不使用外部脚本隔离?i、 e.在MySQL中?@Serg我不确定我是否理解;你想让我在MySQL中为我的数据编译上面的脚本并向你展示输出吗?