Автор: Artix (user.su)
Задача:
Есть список объектов с некоторыми параметрами param1,param2,param3
Параметры могут быть булевского типа (Содержать одно из двух значений: Да/Нет)
или же содержать несколько вариантов разных значений (более двух вариантов).
Нужно: вывести список объектов и для каждого параметра объекта указать либо "чистое"
значение параметра (если он всегда одно и то же), либо вывести отметку, что
параметр содержит разные значения.
Решение:
DROP TABLE IF EXISTS test;
CREATE TABLE test (
part_id integer,
param1 text,
param2 text,
param3 text
);
INSERT INTO test VALUES (1,'on','true','red');
INSERT INTO test VALUES (2,'on','false','red');
INSERT INTO test VALUES (2,'off','false','red');
INSERT INTO test VALUES (3,'on','true','red');
INSERT INTO test VALUES (3,'off','false','green');
INSERT INTO test VALUES (3,'on','true','blue');
.headers on
.mode column
SELECT * FROM test;
SELECT
part_id,
IIF(MAX(param1)=MIN(param1), MAX(param1), NULL) as param1,
IIF(MAX(param2)=MIN(param2), MAX(param2), NULL) as param2,
IIF(MAX(param3)=MIN(param3), MAX(param3), NULL) as param3
FROM test
GROUP BY part_id
Комментарий:
В данном примере, если параметр имеет несколько разных значений -
в соответствующий столбец выводится NULL. В противном случае -
в столбце остаётся исходное значение.
SQL Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor