2017-04-19 84 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) 
         ); 

這使得一個逗號值之間,而不是在最後一個分號。