2013-12-03 1 views
0

Я это MYSQL запрос, и мне нужно столбцы, которые будут сгруппированы рядом с Афоризм, я просто не могу показаться, чтобы не делать это ....Группировка столбцов в MYSQL, сложный запрос

SELECT Supervisor, 
    (CASE WHEN DAYOFWEEK(workdate) = 2 THEN (COUNT(`ID Number`)) END) AS `Monday`, 
    (CASE WHEN DAYOFWEEK(workdate) = 3 THEN (COUNT(`ID Number`)) END) AS `Tuesday`, 
    (CASE WHEN DAYOFWEEK(workdate) = 4 THEN (COUNT(`ID Number`)) END) AS `Wednesday`, 
    (CASE WHEN DAYOFWEEK(workdate) = 5 THEN (COUNT(`ID Number`)) END) AS `Thursday`, 
    (CASE WHEN DAYOFWEEK(workdate) = 6 THEN (COUNT(`ID Number`)) END) AS `Friday`, 
    (CASE WHEN DAYOFWEEK(workdate) = 7 THEN (COUNT(`ID Number`)) END) AS `Saturday` 
FROM payroll.employeedatanew_copy 
INNER JOIN payroll.employeehours ON employeedatanew_copy.`ID Number` = employeehours.employeeid 
WHERE workdate BETWEEN "2013-10-28" AND "2013-11-02" 
GROUP BY workdate, supervisor 

Здесь вы мой результат: http://i.stack.imgur.com/l9kSz.png

Это то, что я хочу: http://i.stack.imgur.com/bRNmJ.png

+0

В изображении «что я хочу» значение для каждой строки такое же для каждого рабочего дня, это то, что ожидается? –

+0

Извлеките поле 'workdate' из' group by'. – Barranka

+0

@MikeBrant, да, я использовал один и тот же набор данных для каждой даты, поэтому значения одинаковы :). – atomapps

ответ

4

Я предполагаю, что вы ищете это:

SELECT Supervisor, 
    COUNT(CASE WHEN DAYOFWEEK(workdate) = 2 THEN 1 END) `Monday`, 
    COUNT(CASE WHEN DAYOFWEEK(workdate) = 3 THEN 1 END) `Tuesday`, 
    COUNT(CASE WHEN DAYOFWEEK(workdate) = 4 THEN 1 END) `Wednesday`, 
    COUNT(CASE WHEN DAYOFWEEK(workdate) = 5 THEN 1 END) `Thursday`, 
    COUNT(CASE WHEN DAYOFWEEK(workdate) = 6 THEN 1 END) `Friday`, 
    COUNT(CASE WHEN DAYOFWEEK(workdate) = 7 THEN 1 END) `Saturday` 
FROM payroll.employeedatanew_copy 
JOIN payroll.employeehours ON employeedatanew_copy.`ID Number` = employeehours.employeeid 
WHERE workdate BETWEEN "2013-10-28" AND "2013-11-02" 
GROUP BY supervisor 

Альтернативно, count s может быть заменен:

SUM(DAYOFWEEK(workdate) = 2) `Monday` 

Это работает на основе того, что true равно 1 в MySQL, но не обязательно будет работать в других СУБД.

+1

Следует отметить, что группировка по 'workdate' в основном помещает все workdate = 2 строки, затем workdate = 3 строки и т. Д. Вы вообще не хотите эту группировку. –

+0

Справа. Вот почему «Даррент Бент» был не один раз в разных строках. –

+1

Огромное спасибо, спасибо за помощь! – atomapps

Смежные вопросы