SQLite: разворот таблицы в несколько строк


Задача - разбить товары по типам и развернуть таблицу горизонтально.
Делается такой фокус с помощью подзапроса, в котором мы
ранжируем товары с учетом сортировки.

.headers on
.mode column

CREATE TABLE products (
    prod_id INTEGER PRIMARY KEY,
    prod_type VARCHAR(50) NOT NULL,
    prod_name VARCHAR(50) NOT NULL
);

INSERT INTO products (prod_type, prod_name) VALUES ('type 1','Prod 1');
INSERT INTO products (prod_type, prod_name) VALUES ('type 1','Prod 2');
INSERT INTO products (prod_type, prod_name) VALUES ('type 2','Prod 1');
INSERT INTO products (prod_type, prod_name) VALUES ('type 3','Prod 1');
INSERT INTO products (prod_type, prod_name) VALUES ('type 3','Prod 2');
INSERT INTO products (prod_type, prod_name) VALUES ('type 3','Prod 3');

-- Разворот таблицы в несколько строк

SELECT max(CASE WHEN prod_type='type 1' THEN prod_name ELSE null END) AS type_1,
       max(CASE WHEN prod_type='type 2' THEN prod_name ELSE null END) AS type_2,
       max(CASE WHEN prod_type='type 3' THEN prod_name ELSE null END) AS type_3
FROM (
	SELECT A.prod_type, A.prod_name,
	    (SELECT count(*) FROM products B
               WHERE B.prod_type=A.prod_type AND
                     A.prod_name>B.prod_name) AS rank
	FROM products A
) X
GROUP BY X.rank
;