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