Да, но это неудобно, вот пример: -
-- Create the original data
DROP TABLE IF EXISTS original;
CREATE TABLE IF NOT EXISTS original (COL_0 TEXT, COL_1 TEXT, COL_2 TEXT, COL_3 TEXT, COL_4 TEXT, COL_5 TEXT, COL_6 TEXT, COL_7 TEXT);
INSERT INTO original VALUES
(null,null,'Spoon','','Fork','','Knife',''),
('Location','Market Postocde','Trade Price','Retail Price','Trade Price','Retail Price','Trade Price','Reatail Price'),
('Market A','AAA111',0.5,1,0.6,1.1,0.55,'NA'),
('Market B','BBB111',0.7,2,0.8,1.5,'NA','NA')
;
SELECT * FROM original;
-- Prepare to create the transformed
DROP TABLE IF EXISTS transformed;
CREATE TABLE IF NOT EXISTS transformed (COL_0 TEXT, COL_1 TEXT, COL_2 TEXT, COL_3 TEXT, COL_4 TEXT);
WITH
item1 AS (SELECT COL_2 FROM original WHERE (length(COL_0) < 1 AND LENGTH(COL_1) < 1) OR (COL_0 IS NULL AND COL_1 IS NULL) ),
item2 AS (SELECT COL_4 FROM original WHERE (length(COL_0) < 1 AND LENGTH(COL_1) < 1) OR (COL_0 IS NULL AND COL_1 IS NULL)),
item3 AS (SELECT COL_6 FROM original WHERE (length(COL_0) < 1 AND LENGTH(COL_1) < 1) OR (COL_0 IS NULL AND COL_1 IS NULL)),
full1 AS (SELECT COL_0, COL_1,(SELECT * FROM item1),COL_2,COl_3 FROM original WHERE length(COL_1) = 6),
full2 AS (SELECT COL_0, COL_1,(SELECT * FROM item2),COL_4,COL_5 FROM original WHERE length(COL_1) = 6),
full3 AS (SELECT COL_0, COL_1,(SELECT * FROM item3),COL_6,COL_7 FROM original WHERE length(COL_1) = 6),
reformed AS (SELECT * FROM full1 UNION SELECT * FROM full2 UNION SELECT * FROM full3)
INSERT INTO transformed SELECT * FROM reformed
;
SELECT * FROM transformed;
Объяснение
Этап 1 - Создание исходных данных
В соответствии с комментариями созданы исходные данные, результат выбора: -
![enter image description here](https://i.stack.imgur.com/lCdno.png)
Вышеуказанное также было выполнено с использованием: -
![enter image description here](https://i.stack.imgur.com/bhIDo.png)
- т.е. col_0 и COL_1 могут быть либо пустыми, либо нулевыми, если строка содержит два элемента.
Этап 2 - Подготовка
На следующем этапе создается таблица с именем преобразованный, в которой можно получить преобразованные данные (т. Е. Таблица с 5 столбцами).
Стадия 3 - Преобразование
Это создает 2 набора из 3 общих табличных выражений (т.е. есть 3 элемента) и окончательный CTE (преобразованный), который объединяет 2-й набор CTE, который затем передается INSERT в подготовленную таблицу результатов с именем трансформируются .
Первый набор, только определенные элементы генерируются путем обработки исходной таблицы и выбора только столбца, в котором будет найден элемент, то есть строк, где COl_0 и COL_1 являются пустой строкой или равны нулю.
Второй набор получает столбцы с данными, относящимися к элементу И элементом из соответствующего элемента? КТР. Критерием включения является то, что этот рыночный код имеет длину 6 символов.
Преобразованный CTE объединяет три CTE из второго набора в один CTE.
Наконец, преобразованный CTE используется для загрузки преобразованного стола.
Предполагалось, что заголовки не требуются, так как обычно они не сохраняются в качестве фактических данных.
Результат: -
![enter image description here](https://i.stack.imgur.com/kziop.png)