2013-04-04 13 views
8

में एक समेकित सूची से मूल्य का चयन करें, मैं डेटाबेस में नहीं होने वाली एक गणना से चयन करना चाहता हूं।PostgreSQL

उदा। SELECT id FROM my_table 1, 2, 3 जैसे मान लौटाते हैं, मैं 1 -> 'chocolate', 2 -> 'coconut', 3 -> 'pizza' आदि प्रदर्शित करना चाहता हूं SELECT CASE काम करता है लेकिन बहुत जटिल और कई मूल्यों के लिए अवलोकन करना कठिन है। मुझे लगता है कि

SELECT id, array['chocolate','coconut','pizza'][id] FROM my_table 

लेकिन मैं सरणी के साथ सफल नहीं हो सका। क्या कोई आसान समाधान है? तो यह एक साधारण सवाल है, एक plpgsql स्क्रिप्ट या ऐसा कुछ नहीं।

उत्तर

0

अन्य सभी मामलों की गणना करने और अन्य में शामिल होने वाली एक और तालिका बनाने के बारे में क्या?

CREATE TABLE table_case 
(
    case_id bigserial NOT NULL, 
    case_name character varying, 
    CONSTRAINT table_case_pkey PRIMARY KEY (case_id) 
) 
WITH (
    OIDS=FALSE 
); 

और आप अपनी तालिका में से चयन जब:

SELECT id, case_name FROM my_table 
inner join table_case on case_id=my_table_id; 
8
with food (fid, name) as (
    values 
    (1, 'chocolate'), 
    (2, 'coconut'), 
    (3, 'pizza') 
) 
select t.id, f.name 
from my_table t 
    join food f on f.fid = t.id; 

या एक CTE के बिना (लेकिन एक ही विचार का प्रयोग करके):

select t.id, f.name 
from my_table t 
    join (
    values 
     (1, 'chocolate'), 
     (2, 'coconut'), 
     (3, 'pizza') 
) f (fid, name) on f.fid = t.id; 
3

यह सही सिंटैक्स है:

SELECT id, (array['chocolate','coconut','pizza'])[id] FROM my_table 

लेकिन आपको उन मानों के साथ एक संदर्भित तालिका बनाना चाहिए।

+0

धन्यवाद !!! यह एक आसान समाधान है जिसे मैं ढूंढ रहा था और यह काम करता है। बस कोष्ठक गायब थे। (मैंने पहले ही एक बार कहा है कि मैं एक टेबल नहीं बनाना चाहता क्योंकि डेटाबेस मेरा नहीं है और यह एक अनौपचारिक प्रश्न है, लेकिन किसी ने मेरी टिप्पणी के साथ उस जवाब को हटा दिया है।) – Turtle