如何在SQL中迭代CASE语句?

时间:2017-01-11 20:05:45

标签: 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 <column name> = 3 THEN 1
        ELSE 0
        END as "column_3"
    FROM <table name>;

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

1 个答案:

答案 0 :(得分:0)

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

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;

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