2014-02-05 6 views
1

У меня есть этот ЗЕЬЕСТ:ВЫБОР В ОТБОРНОЕ Different ГДЕ

SELECT TASK_ID, INVOICED, DELETE_WEEK, 
SUM(MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL) AS hours 
FROM b_report_week 
WHERE INVOICE = 1 AND DELETE_WEEK = 0 
GROUP BY TASK_ID 

Мне нужно добавить еще ЗЕЬЕСТ с SUM в этом запросе, чтобы обеспечить результат:

WHERE INVOICE = 0 

Вместо 1 в предыдущем заявлении. Он по-прежнему должен быть сгруппированы по TASK_ID и DELETE_WEEK все еще должен быть 0. Я попытался это:

SELECT TASK_ID, INVOICED, DELETE_WEEK, 
SUM(MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL) AS hours, 
(SELECT SUM(MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL) AS hours2 
FROM b_report_week WHERE INVOICE = 0 AND DELETE_WEEK = 0 GROUP BY TASK_ID) 
FROM b_report_week 
WHERE INVOICE = 1 AND DELETE_WEEK = 0 
GROUP BY TASK_ID 

Но это, очевидно, неверно. Мне нужно использовать часы и часы2 для вывода правильных результатов внутри цикла PHP while, который у меня есть. Помощь будут оценены

ответ

0

вы могли бы использовать Case заявления:

SELECT TASK_ID, INVOICED, DELETE_WEEK, 
case when INVOICE = 1 then SUM(MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL) else 0 end AS hours, 
case when INVOICE = 0 then SUM(MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL) else 0 end AS hours2, 
FROM b_report_week 
WHERE DELETE_WEEK = 0 
GROUP BY TASK_ID 

(примечание - где положение было изменить, чтобы избежать ограничения результатов счета-фактуры = 1.)

+0

Необходимо, чтобы изменить случай, когда СЧЕТ к INVOICED .. Но это в правильном направлении. Однако, когда я получаю результат в течение нескольких часов: $ taskTotalHours = $ row ['hours']; Кажется, он добавляет как INVOICED = 1, так и INVOICED = 0. Любая идея, почему? – andy

+0

Не знаю, я что-то высмеял и заметил, что мне пришлось добавить счет в группу, но результаты были согласованы – NDJ

0

использование CASE

SELECT TASK_ID, INVOICED, DELETE_WEEK, 
SUM(MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL) AS hours , 
SUM(CASE WHEN INVOICE = 0 then MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL else o end case) as custom_sum 
FROM b_report_week 
WHERE DELETE_WEEK = 0 
GROUP BY TASK_ID 
0

Также вы можете решить эту проблему с помощью статьи UNION

SELECT TASK_ID, INVOICED, DELETE_WEEK, 
SUM(MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL) AS hours 
FROM b_report_week 
WHERE INVOICE = 1 AND DELETE_WEEK = 0 
GROUP BY TASK_ID 
UNION 
SELECT TASK_ID, INVOICED, DELETE_WEEK, 
SUM(MON_BILL+TUE_BILL+WED_BILL+THU_BILL+FRI_BILL) AS hours 
FROM b_report_week 
WHERE INVOICE = 0 AND DELETE_WEEK = 0 
GROUP BY TASK_ID 

, но я думаю, что это более легко читаемым случай, когда условие

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