【问题标题】:MySql case statement returning multiple rows and multiple columnsMySql case语句返回多行多列
【发布时间】:2015-05-14 11:32:16
【问题描述】:

我有一张桌子

    -id   --col_1 -- col_2 -- col3 --col_4 -- col5
    ------------------------------------------------
     1       a         b       c       d       e
     2       a1        b1      c1      d1      e1
     3       a2        b2      c2      d2      e2

我需要检查 col3 是否包含一个值,如果存在我需要显示 col1 和 col2 值,其余值应该为空。另一个条件,如果 col4 包含值,我只需要显示 col2 和 col5 值

    -id   --col_1 -- col_2 -- col3 --col_4 -- col5
    ------------------------------------------------
     1       a         b       c              
     1                 b1             d1      e1
     2       a1        b1      c1     
     2                 b1             d1      e1
     3       a2        b2      c2       
     3                 b2             d2      e2

我不知道要遵循哪个程序来满足我的要求。我使用了 case 语句,我只检索了两个条件的一条记录,只有一列

SELECT    
CASE
    WHEN col3 != '' THEN col4        
END as a, 
CASE
    WHEN col4 != '' THEN col2
END as b
FROM table;

任何帮助!..

【问题讨论】:

  • 当 col4 不为空时,您的示例有 col2、col4 和 col5 - 请更正此条件(或示例)。还要澄清一下,我们说的是空字符串:有空值吗?也许还可以解释这个问题背后的背景 - 你需要以这种(非常尴尬)的方式存储+解决问题
  • 在我的示例中,如果我需要为每个条件返回一行。对于第一条记录,如果 col3 包含一个值,我需要获取一条只有 col1 和 col2 剩余值的记录,我不应该显示。再次在第一条记录中,如果 col4 有一个值,我需要用其他列生成一个新记录

标签: mysql mysql-workbench


【解决方案1】:

如果我理解正确,你只需要union all

select id, col1, col2, col3, NULL as col4, NULL as col5
from table
union all
select id, NULL, col2, NULL, col4, NULL as col5
from table ;

【讨论】:

  • 我的表中有近 130 列。每个列名的位置会很困难
  • 所以从你的表定义中生成这个 sql
  • 感谢您的回复,您为我工作。但是我有 50 列来显示根据条件为某些列保持 null 是很困难的。我有四个以上的条件。
  • @user2083041 。 . .我只能回答被问到的问题。如果您还有其他问题(比如更多列),那么您应该将其作为另一个问题提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多