Я пытаюсь создать список из двух таблиц. Конечный результат должен быть:
Date A OHS OMSN OMSS
date1 1 1 2 3
date2 4 5 6 7
date... .. .. .. ..
Диапазоны дат создаются на основе сгенерированной мной таблицы календаря и объединяются справа, поэтому они включаются, даже если счет для других зданий равен 0. В каждом здании есть счетчик, который должен просто подсчитывать рабочие заказы для каждого здания. день. Вот запрос, который я имею до сих пор:
Select calendar.datefield As 'Date',
Count(FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d')) As 'Count'
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d')
Group By calendar.datefield
Этот запрос дает мне общее количество заказов для всех местоположений за каждый день в определенном диапазоне. В том числе это нормально, но я хочу иметь еще 3 столбца, которые фильтруются каждым конкретным кремом. Если я добавлю название здания следующим образом:
Select calendar.datefield As 'Date', workorders.location,
Count(FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d')) As 'Count'
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d')
Group By calendar.datefield, workorders.location
Тогда таблица дает мне данные, которые мне нужны, но не столбцы, которые я ищу. Данные будут где-то лежать так:
2011-09-08 OHS 27
2011-09-09 OHS 24
2011-09-10 NULL 0
2011-09-11 NULL 0
2011-09-12 OHS 23
2011-09-13 OHS 18
2011-09-13 OMS-N 1
2011-09-14 OHS 20
Я хочу извлечь из этого запроса, выбрав дату, затем номера, где это OHSN, затем номера, где это OMSN, затем номера, где это OMSS и т. Д ...
Должен быть более простой способ сделать это, и я буквально трудился целыми днями, пытаясь соединить этот запрос.
Я надеюсь, что кто-то может помочь. За последние несколько месяцев я выучил mysql на лету, и любая помощь очень ценится.
_ _ ДАЛЬНЕЙШИЙ ОБЗОР:
SELECT calendar.datefield, tOHS.Count AS 'OHS'
FROM calendar
LEFT JOIN (
SELTCT workorders.school, Count( workorders.dateSubmitted ) AS 'Count', FROM_UNIXTIME( workorders.dateSubmitted, '%Y-%m-%d' ) AS test
FROM workorders
RIGHT JOIN calendar ON ( FROM_UNIXTIME( workorders.dateSubmitted, '%Y-%m-%d' ) = calendar.datefield )
WHERE calendar.datefield
BETWEEN '2011-08-30'
AND date_format( now( ) , '%Y-%m-%d' )
AND School = 'OHS'
GROUP BY calendar.datefield, workorders.school
)tOHS ON calendar.datefield = tOHS.test
WHERE calendar.datefield
BETWEEN '2011-08-30'
AND date_format( now( ) , '%Y-%m-%d' )
Возвращает даты и ежедневный счет для первого местоположения OHS. КОГДА я попробую это:
select calendar.datefield, tOHS.Count as 'OHS'
from calendar
LEFT JOIN
(
Select workorders.school, Count(workorders.dateSubmitted) As 'Count', FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') as test
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d') AND School = 'OHS'
Group By calendar.datefield,workorders.school
) tOHS
on calendar.datefield = tOHS.test
LEFT JOIN
(
Select workorders.school, Count(workorders.dateSubmitted) As 'Count', FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') as test
From workorders Right Join
calendar On (FROM_UNIXTIME(workorders.dateSubmitted, '%Y-%m-%d') =
calendar.datefield)
Where calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d') AND School = 'OMS-S'
Group By calendar.datefield,workorders.school
) tOMSS
on calendar.datefield = tOHS.test
WHERE calendar.datefield Between '2011-08-30' And date_format(now(), '%Y-%m-%d')
Это разрывает запрос все вместе. Я вижу ту же дату и одно и то же значение, повторенное для всех столбцов. Я использую неправильное соединение?