Результат вертикального столбца в горизонтальный

#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
  

Результат:

введите описание изображения здесь

проверка и пересечение устанавливаются с помощью if accepted = 1 проверка, 2 пересечения, остальное не отображается

И я хочу добиться этого:

отредактировано с помощью paint

Я использую 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() , результат был бы таким же.