2017-04-19 51 views
1

我需要创建一个包含从布尔列颜色值VARCHAR列,这里的表结构:创建VARCHAR列从布尔列的PostgreSQL

CREATE TABLE public.prosp(
    id serial PRIMARY KEY NOT NULL, 
    isblack bool, 
    isyellow bool, 
    isgreen bool 
); 

我想添加一个名为色方含例如柱:​​

如果isgreen = true,我想这和它的工作

SELECT 
"id",  
    CASE WHEN "isblack" THEN 'black; ' ELSE '' END || 
    CASE WHEN "isyellow" THEN 'yellow; ' ELSE '' END || 
    CASE WHEN "isgreen" THEN 'green; ' ELSE '' END 
    AS couleurs 
FROM public.prosp 

现在我需要把上面表达式的结果在color列。

谢谢。

+0

输出应该如何?如果多个条件属实,您是否需要分隔结果? –

+0

也许会创建一个包含您的varchar颜色列的视图 – supergrady

+0

是的,我希望它在多个条件为真时分隔。 – geoinfo

回答

1

这是你想要的吗?

alter table public.prosp add column color varchar(255); 

update public.prosp 
    set color = (CASE WHEN isblack THEN 'black; ' ELSE '' END) || 
       (CASE WHEN isyellow THEN 'yellow; ' ELSE '' END) || 
       (CASE WHEN isgreen THEN 'green; ' ELSE '' END); 

我要指出,这往往会使用concat_ws()来完成:

update public.prosp 
    set color = concat_ws(',', 
          (CASE WHEN isblack THEN 'black' END), 
          (CASE WHEN isyellow THEN 'yellow' END), 
          (CASE WHEN isgreen THEN 'green' END) 
         ); 

这使得一个逗号值之间,而不是在最后一个分号。