【问题标题】:Case statement in multiple conditions?多个条件下的案例陈述?
【发布时间】:2021-03-07 12:15:32
【问题描述】:

我想检查mr.name 列,如果mr.name 为空,那么我必须将mr.name 替换为mr.ticket_no。如何? if else 或者 case 可以用吗?

    select ROW_NUMBER() OVER(ORDER BY mr_user) sl_no,* from (select 
    mr.name as mr_no,
    coalesce(mr.user_id,0) as mr_user
    from stock_production_lot lot
    left join kg_grn grn on (grn.name = lot.grn_no)
    left join kg_department_indent mr on (mr.name = grn.mr_no)
    order by mr.user_id) main
    where  mr_user=65

当我这样使用时

case when mr.name is null then '' else mr.ticket_no = grn.mr_no as mr_no

会报错

如果 mr.name = null 意味着我必须替换 mr.name = mr.ticket_no。我想检查 mr.name 列,如果 mr.name 为空,那么我必须将 mr.name 替换为 mr.ticket_no

【问题讨论】:

    标签: sql postgresql case postgresql-9.5


    【解决方案1】:

    您可以使用 coalesce() 将 null 替换为任何内容:

     select ROW_NUMBER() OVER(ORDER BY mr_user) sl_no,* from (select 
        coalesce(mr.name,mr.ticket_no)   as mr_no,
        coalesce(mr.user_id,0) as mr_user
        from stock_production_lot lot
        left join kg_grn grn on (grn.name = lot.grn_no)
        left join kg_department_indent mr on (mr.name = grn.mr_no)
        order by mr.user_id) main
        where  mr_user=65
    

    但是,如果您对大小写感到满意,请按以下方式使用:

     select ROW_NUMBER() OVER(ORDER BY mr_user) sl_no,* from (select 
        (case when mr.name is null then mr.ticket_no else mr.name end)   as mr_no,
        coalesce(mr.user_id,0) as mr_user
        from stock_production_lot lot
        left join kg_grn grn on (grn.name = lot.grn_no)
        left join kg_department_indent mr on (mr.name = grn.mr_no)
        order by mr.user_id) main
        where  mr_user=65
    

    【讨论】:

      猜你喜欢
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2012-08-11
      • 2015-12-07
      相关资源
      最近更新 更多