Задача - разбить товары по типам и развернуть таблицу горизонтально.
Делается такой фокус с помощью подзапроса, в котором мы
ранжируем товары с учетом сортировки.
.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
;
SQL Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor