SQLite: простой разворот таблицы


Задача - слелать из вертикальной таблицы горизонтальную.
Если в исходной таблице один из столбцов уникален -
то таблица разворачивается в одну строку таким способом:

.headers on
.mode column

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

CREATE UNIQUE INDEX idx_prod_name ON products (prod_name);

INSERT INTO products (prod_name, prod_qnt) VALUES ('Prod 1', 10);
INSERT INTO products (prod_name, prod_qnt) VALUES ('Prod 2', 20);
INSERT INTO products (prod_name, prod_qnt) VALUES ('Prod 4', 40);

-- Разворот таблицы в одну строку = "наличие товара на складе"

SELECT sum(CASE WHEN prod_name='Prod 1' THEN 1 ELSE 0 END) AS prod_1,
       sum(CASE WHEN prod_name='Prod 2' THEN 1 ELSE 0 END) AS prod_2,
       sum(CASE WHEN prod_name='Prod 3' THEN 1 ELSE 0 END) AS prod_3,
       sum(CASE WHEN prod_name='Prod 4' THEN 1 ELSE 0 END) AS prod_4
FROM products;

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

SELECT max(CASE WHEN prod_name='Prod 1' THEN prod_qnt ELSE null END) AS prod_1,
       max(CASE WHEN prod_name='Prod 2' THEN prod_qnt ELSE null END) AS prod_2,
       max(CASE WHEN prod_name='Prod 3' THEN prod_qnt ELSE null END) AS prod_3,
       max(CASE WHEN prod_name='Prod 4' THEN prod_qnt ELSE null END) AS prod_4
FROM products;