INVOICES TABLE
id | date | Customer
1 | 2018-01-01 | a
2 | 2018-01-01 | b
3 | 2018-01-02 | c
4 | 2018-01-02 | d
5 | 2018-01-02 | e
INVOICES_ITEMS TABLE
id | invoice_id | name | total
1 | 1 | Billing | 1500
2 | 2 | Billing | 400
3 | 2 | Reconnection | 100
4 | 3 | Installation | 1000
5 | 4 | Billing | 900
6 | 4 | Penalty | 500
7 | 5 | Reconnection | 100
У меня есть таблица invoice_items в моей базе данных для хранения всех элементов счета. У меня есть date column в моем Invoice Table и name column в моем invoice_item table. Я хочу сгруппировать все данные с одинаковым именем и датой и получить их общее количество. Мне трудно достичь того, чего я хочу. Любая помощь будет оценена по достоинству. Спасибо
Ожидаемый результат:
Date | Billing | Reconnection | Installation | Penalty
2018-01-01 | 1900 | 100 | 0 | 0
2018-01-02 | 900 | 100 | 1000 | 500
Текущий код:
$q = $this->db
->select ( "invoices.date,
SUM(invoices_items.total) as Billing,
SUM(invoices_items.total) as Reconnection,
SUM(invoices_items.total) as Installation,
SUM(invoices_items.total) as Penalty,
->from("invoices")
->join("invoices_items", "invoices.id=invoices_items.invoice_id")
->group_by(array("date","name"))
->get();
Текущий вывод кода:
Date | Billing | Reconnection | Installation | Penalty
2018-01-01 | 1900 | 1900 | 1900 | 1900
2018-01-01 | 100 | 100 | 100 | 100
2018-01-02 | 900 | 900 | 900 | 900
2018-01-02 | 100 | 100 | 100 | 100
2018-01-02 | 1000 | 1000 | 1000 | 1000
2018-01-02 | 500 | 500 | 500 | 500
Никто. но результат неверен, я не могу добиться ожидаемого результата.






Я думаю, вам следует использовать date () в группе by. Вы можете попробовать это. Это может сработать
$this->db
->select ("i.date,
SUM(it.total) as Billing,
SUM(it.total) as Reconnection,
SUM(it.total) as Installation,
SUM(it.total) as Penalty")
->from("invoices i")
->join("invoices_items it", "i.id=it.invoice_id")
->group_by(['date(i.date)', 'it.name'])
->get();
спасибо за ответ, но все равно не получается получить результат как в expected output
Попробуйте Sum с условием if ...
$q = $this->db
->select ( "invoices.date,
SUM(IF(invoices_items.name='Billing',invoices_items.total, 0)) as Billing,
SUM(IF(invoices_items.name='Reconnection',invoices_items.total, 0)) as Reconnection,
SUM(IF(invoices_items.name='Installation',invoices_items.total, 0)) as Installation,
SUM(IF(invoices_items.name='Penalty',invoices_items.total, 0)) as Penalty")
->from("invoices")
->join("invoices_items", "invoices.id=invoices_items.invoice_id")
->group_by(array("invoices.date"))
->get();
есть ошибка?