#mysql #sql #datetime #pivot #max
#mysql #sql #дата и время #сводная #макс
Вопрос:
Мне нужно поместить результат столбца в горизонтальное положение, как SUM(CASE WHEN status = 'On Hold' THEN 1 ELSE 0 END) AS 'word'
делают, я тоже пробовал подзапрос и псевдоним, но у меня не было успеха. Я думаю, что JOIN — это объединение с несколькими таблицами и объединение для получения результатов в одном столбце.
Я использую эту страницу в качестве ссылки
https://www.mysqltutorial.org/mysql-case-function/
таблица mysql: phpvms_pireps
pilotid|flightnum|submitdate|accepted
Мой код sql:
SELECT DISTINCT `phpvms_pireps`.`pilotid`
, `phpvms_pireps`.`accepted`
, `phpvms_pireps`.`flightnum`
, `phpvms_pireps`.`submitdate`
FROM phpvms_pireps
WHERE ((`phpvms_pireps`.`flightnum` in ('A-1', 'A-2', 'A-3', 'A-4')))
AND submitdate BETWEEN '2020-04-09' AND '2020-04-11'
ORDER
BY `phpvms_pireps`.`pilotid` ASC
Результат:
И я хочу добиться этого:
Я использую php / html, как я могу получить этот результат?
Большое вам спасибо!
Комментарии:
1. Рассмотрим проблемы с отображением данных в коде приложения
2. Привет @Strawberry что ты имеешь в виду?
3. Я имею в виду противоположное тому, что предлагает GMB
Ответ №1:
Вы описываете сводную таблицу. Рассмотрите возможность использования условной агрегации:
select
pilotid,
max(case when flightnum = 'A-1' then accepted end) a1,
max(case when flightnum = 'A-2' then accepted end) a2,
max(case when flightnum = 'A-3' then accepted end) a3,
max(case when flightnum = 'A-4' then accepted end) a4
from phpvms_pireps
where
flightnum in ('A-1', 'A-2', 'A-3', 'A-4')
and submitdate between '2020-04-09' and '2020-04-11'
group by pilotid
order by pilotid
Комментарии:
1. Благодаря @GMB я удаляю «,» после a4 из-за ошибки: «Во время анализа было обнаружено 1 ошибка. Ожидалось выражение. (рядом с «from» в позиции 264)» Что именно здесь означает «max»?
2. @arv187: нам нужна одна запись на пилот, поэтому мы
group by pilotid
. Нам нужна агрегирующая функция вокругcase
выражения, даже если есть только одна строка, которая соответствует условию. Мы могли бы также использоватьmin()
, результат был бы таким же.