【问题标题】:Case returns more than one value when using it with join将 case 与 join 一起使用时返回多个值
【发布时间】:2018-12-19 11:37:18
【问题描述】:

我在使用 case 时遇到问题,并在 redshift 中加入 (这不是我的真实数据,它只是为了示例,所以 max 对我没有帮助)。 这是我的查询:

select a.num1, 
(case when b.param = 'd' then b.param
when b.param = 'c' then b.param
when b.param = 'b' then b.param
when b.param = 'a' then b.param end)
from table a inner join table b on a.num1 = b.num1

对于表 a:

对于表 b:

我得到的结果是:

但我只想为每个“num1”获取案例的第一个匹配项,例如:

我怎样才能做到这一点?谢谢!

【问题讨论】:

    标签: sql postgresql join case amazon-redshift


    【解决方案1】:

    对于这个数据,你可以使用max()

    select a.num1, 
           max(case when b.param = 'd' then b.param
                    when b.param = 'c' then b.param
                    when b.param = 'b' then b.param
                    when b.param = 'a' then b.param
               end)
    from table a inner join
         table b
         on a.num1 = b.num1
    group by a.num1;
    

    这可以简化为:

    select a.num1, max(b.param)
    from table a inner join
         table b
         on a.num1 = b.num1
    group by a.num1;
    

    这回答了您提出的问题。这可能无法解决您的实际问题。我建议你问另一个问题,提供更合适的样本数据和更好地描述你想要做什么。

    【讨论】:

      【解决方案2】:

      这个问题在 another question I've opened.

      我需要使用coalesce

      SELECT a.id,
             COALESCE( MAX(CASE WHEN b.param_type = 'Ignition' THEN a.param_value END), 
                       MAX(CASE WHEN b.param_type = 'Turn' THEN a.param_value END),
                       MAX(CASE WHEN b.param_type = 'Speed' THEN a.param_value END),
                       MAX(CASE WHEN b.param_type = 'Break' THEN a.param_value END)
                     ) as value
      FROM public.tbl_a a JOIN
           public.tbl_b
           ON b.id = a.id
      GROUP BY a.id;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 2019-04-23
        • 2013-04-09
        • 2015-02-15
        • 2014-03-18
        相关资源
        最近更新 更多