Выходной псевдоним в запросе MySQL SELECT - PullRequest
0 голосов
/ 04 мая 2011

Я пытаюсь создать запрос.Запрос является частью системы планирования работы и используется для определения количества часов, выделяемых каждому пользователю системы в день, на все задания, кроме того, которое просматривается в данный момент.

Я хочувыходные данные с красивыми именами псевдонимов, такие как hours_mon, hours_tue и т. д.

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

SELECT SUM(alloc.hours), alloc.day FROM grwp_allocations AS alloc LEFT JOIN grwp_jobs AS job ON (job.id = alloc.job_id AND job.id != '3') WHERE alloc.user_id = '35' AND alloc.deleted = '0' AND alloc.acknowledged = '0' GROUP BY alloc.day

, который работает хорошо, но я действительно хочузаменить 'SUM (alloc.hours)' на часы _...

Я пробовал следующее, но оно выдает сообщение об ошибке

SELECT SUM(alloc.hours) AS CONCAT('hours_',alloc.day), alloc.day

Схема таблицы: grwp_allocations:

  • id
  • job_id
  • user_id
  • day
  • hours

grwp_jobs:

  • id

Помните, в конце я хочу, чтобы данные были доступны как следующие:

hours_mon, hours_tue, hours_wed и т. д.где 'mon', 'tue', 'wed' и т. д. - это значения из поля DAY, а значение псевдонима - это (суммированные) часы.

Спасибо.

1 Ответ

3 голосов
/ 04 мая 2011

Это не имеет большого смысла.

Вы ЛИБО хотите столбец hours_per_day, который будет генерировать такие данные, как:

hours_per_day  |  day
---------------+-------
10             |  mon
9              |  tue

это, очевидно, легко исправить, просто переименовав столбец SUM в вашем запросе:

SELECT SUM(alloc.hours) AS hours_per_day`

ИЛИ

вам нужен столбец для дня недели (hours_mon, hours_tue ...), который потребует совершенно другой запрос - , а не только разные имена столбцов! Этот случай называется PIVOT таблица, и будет выглядеть так:

user | mon | tue | wed
-----+-----+-----+----
 35  | 10  |  9  |  0

Для получения инструкций о том, как добиться этого в MySQL, перейдите по ссылке: http://www.artfulsoftware.com/infotree/queries.php?&bw=1339#78

Один из показанных им вариантов будет выглядеть примерно так:

SELECT alloc.user_id AS user,
       SUM(IF(alloc.day = 'mon',alloc.hours,0)) as mon,
       SUM(IF(alloc.day = 'tue',alloc.hours,0)) as tue,
       SUM(IF(alloc.day = 'wed',alloc.hours,0)) as wed,
       SUM(IF(alloc.day = 'thu',alloc.hours,0)) as thu,
       SUM(IF(alloc.day = 'fri',alloc.hours,0)) as fri
FROM grwp_allocations AS alloc
LEFT JOIN grwp_jobs AS job ON (job.id = alloc.job_id AND job.id != '3')
WHERE alloc.user_id = '35'
AND alloc.deleted = '0'
AND alloc.acknowledged = '0'
GROUP BY alloc.user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...