代码之家  ›  专栏  ›  技术社区  ›  Michu93

选择when和value after then而不是string

  •  0
  • Michu93  · 技术社区  · 8 年前

    我的疑问是:

    SELECT
        id,
        CASE WHEN EXISTS(
        SELECT
            data_od
        FROM
            bp_stan_produkt
        WHERE
            id_produkt = bp_produkt.id AND data_do IS NULL AND id_stan_produkt = 313
    ) THEN 'TAK' ELSE 'NIE'
    END AS "313"
    FROM
        bp_produkt
    WHERE
        id IN(21048528)
    

    有没有可能 data_od 到列 313 而不是 TAK 或者我必须创建函数 SELECT data_od into some_variable then some_variable ?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Lukasz Szozda    8 年前

    是的,有可能:

    select id, 
      case when exists (select data_od from bp_stan_produkt 
                      where id_produkt = bp_produkt.id and data_do is null 
                       and id_stan_produkt = 313) 
       then  (select to_char(data_od, 'YYYY-MM-DD')
                       from bp_stan_produkt 
                       where id_produkt = bp.id 
                         and data_do is null
                         and id_stan_produkt = 313)
      else 'NIE'
      end as "313"
    from bp_produkt 
    where id in(21048528);
    

    编辑:

    SELECT bp.id, COALESCE(t.data_od_t, 'NIE') AS "313"
    FROM bp_produkt bp
    LEFT JOIN LATERAL (select to_char(data_od, 'YYYY-MM-DD') AS data_od_t 
                       from bp_stan_produkt 
                       where id_produkt = bp.id 
                         and data_do is null
                         and id_stan_produkt = 313) t 
     ON TRUE
    WHERE bp.id in(21048528)