【问题标题】:Using CASE WHEN statements (MySQL)使用 CASE WHEN 语句 (MySQL)
【发布时间】:2017-10-28 18:31:13
【问题描述】:

在 case when 语句 (MySQL) 中挣扎,它可能很简单,我错过了。

我有一个相当复杂的查询,它输出一些传感器值和上下限(最终会触发警报),作为我使用的查询的一部分 -

case when sequence=0 then value END as lowlimit, 
case when sequence=1 then value END as highlimit

选择的输出是 -

status  sensor  lowlimit    highlimit

163      49      NULL          24
163      49       15          NULL
128      25      NULL          8
128      25       4           NULL

但我需要将结果“串联”(每个唯一状态为一行),因此 -

status  sensor  lowlimit    highlimit

163       49      15           24
128       25      4             8

所以可能需要在案例陈述中添加一些内容,但如果我使用

max(case when sequence=0 then value END) as lowlimit, 
max(case when sequence=1 then value END) as highlimit

那么只有1行输出-

 status sensor  lowlimit    highlimit

 163     49        15          24

感谢任何帮助。

问候 活跃

【问题讨论】:

  • 你能分享整个查询吗?
  • 不是真的,有 8 个表连接,select 语句实际上有 15 个元素,唯一的问题是语句输出超过 1 行的情况

标签: mysql


【解决方案1】:

如果您需要同一行的结果 您应该使用 seleft 连接(不是大小写)

select a.status, a.sensor, a.values as lowlimit, b.value as highlimit
from my_table a 
inner join (
    select status, sensor, value from my_table 
    where sequence = 1
  ) b on a.sensor = b.sensor and a.status = b.status
where a.sequence = 0

【讨论】:

  • 谢谢,但我现有选择的输出不是一个表,它是 8 个表的多级选择,唯一的问题是每个状态的输出是 2 行
  • 我基于您提供的样本..基于此,我的答案应该是正确的...无论如何,如果您需要同一行上的两个值,我知道,您应该使用我的回答中建议的正确自加入 ans
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 2012-02-05
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多