При написании этого кода «императивно», вы бы хотели генерировать больше строк из одной, возможно, используя что-то вроде flatMap (или эквивалент в вашем языке программирования).Для генерации строк в SQL вы должны использовать JOIN
.
Эта проблема может быть решена путем (CROSS
) JOIN
объединения вашей таблицы с другой, имеющей столько строк, сколько столбцов для unpivot .Вам нужно добавить условную магию и Вуаля! .
CREATE TABLE t (
"Date" date,
"Country" varchar,
"Order" varchar,
"Banana" varchar,
"Apple" varchar,
"Orange" varchar,
"Kiwi" varchar,
"Lemon" varchar
);
INSERT INTO t VALUES ('1-10-2018', 'Belgium', 'XYZ789', '14', '0', '10', '16', '7');
INSERT INTO t VALUES ('1-10-2018', 'Germany', 'ABC123', '10', '15', '3', '15', '3');
INSERT INTO t VALUES ('2-10-2018', 'Belgium', 'KLM456', '9', '9', '7', '1', '7');
WITH
cols as (
select 'Banana' as c
union all
select 'Apple' as c
union all
select 'Orange' as c
union all
select 'Kiwi' as c
union all
select 'Lemon' as c
)
select
"Date",
"Country",
"Order",
CASE c
WHEN 'Banana' THEN "Banana"
WHEN 'Apple' THEN "Apple"
WHEN 'Orange' THEN "Orange"
WHEN 'Kiwi' THEN "Kiwi"
WHEN 'Lemon' THEN "Lemon"
ELSE NULL
END as v
from t cross join cols;
https://www.db -fiddle.com / f / kojuPAjpS5twCKXSPVqYyP / 2