Как получить два результата запроса из одного столбца таблицы для роста и веса - PullRequest
0 голосов
/ 14 марта 2020

У меня есть таблица, которая по существу содержит рост , вес и дату учеников ( sid ). высота и вес содержатся в одном столбце: 'Percent', а столбец перечисления содержит рост и вес. Записи для обоих имеют одинаковую дату:

-- Table structure and sample data for table `PROGWandH`
--
CREATE TABLE `wandh` (
  `Wid` int(24) NOT NULL,
  `sid` int(4) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `level` enum('height','weight') NOT NULL,
  `Percent` decimal(5,1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `PROGWandH` (`Wid`, `sid`, `date`, `level`, `Percent`) VALUES
(157, 55, '2020-01-13 15:00:00', 'weight', '20.2'),
(131, 55, '2019-12-12 15:00:00', 'weight', '19.8'),
(121, 55, '2019-11-14 15:00:00', 'weight', '19.3'),
(774, 55, '2020-01-13 15:00:00', 'height', '113.0'),
(749, 55, '2019-12-12 15:00:00', 'height', '112.0'),
(739, 55, '2019-11-14 15:00:00', 'height', '111.5');
--
ALTER TABLE `wandh`
  ADD PRIMARY KEY (`Wid`);

Я пытаюсь создать список с высотой, шириной и датой столбцов. PHP, который я использую, генерирует один набор каждый, один за другим, но мне нужно сгенерировать список как рост, вес, дата, рост, вес и т. Д. c. То, что я пробовал до сих пор, генерирует дубликаты, поэтому выходные данные не синхронизируются:

select Percent, s1.Percent1, date
from wandh
JOIN (SELECT DISTINCT Percent as 'Percent1' from wandh where level = 'weight' and sid = 55) as s1
      where sid = 55 and level = 'height';

и

select Percent, s1.Percent1, date
from wandh JOIN (SELECT Percent as 'Percent1' from wandh where level = 'weight' and sid = 55) as s1
      on date where sid = 55 and level = 'height';

Другие варианты, которые я пробовал, не работают.

select level, Percent, date from wandh where level like '%eight' and sid = 55;

Чего мне не хватает?

1 Ответ

0 голосов
/ 14 марта 2020

Вы можете сделать это с условным агрегированием:

select sid, date,
  max(case when level = 'weight' then percent end) weight,
  max(case when level = 'height' then percent end) height
from wandh
group by sid, date

См. Демоверсию . Результаты:

| sid | date                | weight | height |
| --- | ------------------- | ------ | ------ |
| 55  | 2019-11-14 15:00:00 | 19.3   | 111.5  |
| 55  | 2019-12-12 15:00:00 | 19.8   | 112    |
| 55  | 2020-01-13 15:00:00 | 20.2   | 113    |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...