Выберите данные, используя оператор if, чтобы показать Недоступно для пропущенных значений - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть таблица базы данных в mysql, в которой хранятся такие типы, как "температура", "oxygen_saturation", "heart_rate", "systolic_pressure", "diastolic_pressure".

Однако для данного checkup_id некоторые типы могут не сохраняться. Те, кого я хочу показать им как N / A.

Моя таблица выглядит следующим образом:

CREATE TABLE `exam` (
  `id` int NOT NULL AUTO_INCREMENT,
  `checkup_id` int NOT NULL,
  `type` varchar(100) NOT NULL,
  `result` longtext NOT NULL,
  `combined_exam_id` int NOT NULL DEFAULT '-1',
  `status` tinyint NOT NULL DEFAULT '1',
  `version_id` int NOT NULL,
  PRIMARY KEY (`id`,`version_id`),
  UNIQUE KEY `exam_id` (`id`,`version_id`) /*!80000 INVISIBLE */,
  KEY `checkup_idx` (`checkup_id`) /*!80000 INVISIBLE */,
  KEY `version_id_fk_exam_idx` (`version_id`),
  CONSTRAINT `exam_ibfk_1` FOREIGN KEY (`checkup_id`) REFERENCES `endorse_checkup` (`id`),
  CONSTRAINT `version_id_fk_exam` FOREIGN KEY (`version_id`) REFERENCES `ps_versioning` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;

У меня есть следующий оператор выбора:

SELECT end_up.id as checkup_id,
    end_e.type, 
    end_e.result,
FROM  endorse_exam as end_e
left JOIN endorse_checkup as end_up on end_up.id = end_e.checkup_id
left JOIN ps_versioning  as v ON v.id = end_e.version_id
left JOIN u_users  as u ON u.user_id = v.user_id
WHERE end_up.patient_id = 50 AND v.id <= (SELECT IF(164 > -1, 164, max(v.id))) and checkup_id = 25;

Примечание: я поставил 164 значение вручную, но на самом деле оно приходит через API.

Используя приведенный выше код SQL, я получаю результат, подобный

enter image description here

Однако я хочу создать запрос для получения информации, как:

enter image description here

...