select id,
case
when int_values is null or array_length(int_values,1) is null then null
else unnest(int_values)
end as value
from the_table;
(ध्यान दें कि मैंने कॉलम का नाम बदल दिया values
से int_values
values
. के रूप में एक आरक्षित शब्द है और इसे कॉलम नाम के रूप में इस्तेमाल नहीं किया जाना चाहिए)।
SQLFiddle:http://sqlfiddle.com/#!1/a0bb4/1
Postgres 10 unnest()
. का उपयोग करने की अनुमति नहीं देता है उस तरह और अधिक।
आपको लेटरल जॉइन का उपयोग करने की आवश्यकता है:
select id, t.i
from the_table
cross join lateral unnest(coalesce(nullif(int_values,'{}'),array[null::int])) as t(i);
ऑनलाइन उदाहरण:http://rextester.com/ALNX23313
क्रॉस जॉइन के बजाय लेफ्ट जॉइन का उपयोग करते समय इसे और भी सरल बनाया जा सकता है:
select id, t.i
from the_table
left join lateral unnest(int_values) as t(i) on true;
ऑनलाइन उदाहरण:http://rextester.com/VBO52351