Сводная таблица SQL с дополнительным столбцом

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

У меня есть этот запрос сейчас:

SELECT IFNULL( p.waybill_number,  'GrandTotal' ) AS Waybill, w.consignee, w.consignor,
SUM( IF(       p.payment_terms =  'prepaid', p.amount, NULL ) ) AS Prepaid,
SUM( IF( p.payment_terms =  'collect', p.amount, NULL ) ) AS Collect
FROM payment p JOIN
waybill w
ON p.waybill_number = w.waybill_number
GROUP BY p.waybill_number WITH ROLLUP

но это показывает значения для грузополучателя и грузополучателя в последнем ряду. я хочу показать ТОЛЬКО GrandTotal для всех транзакций «PREPAID» и «COLLECT» в самой последней строке. Я надеюсь, что вы можете помочь.

Заранее спасибо!!!

ОБНОВИТЬ:::
Я отредактировал свой запрос, и теперь он выглядит так …

SELECT
IFNULL(mw.waybill_number, 'GrandTotal') as Waybill,
CASE WHEN mw.waybill_number THEN c1.name ELSE NULL END as Consignee,
CASE WHEN mw.waybill_number THEN c2.name ELSE NULL END as Consignee,
SUM(IF(p.payment_terms = 'prepaid', p.amount, NULL)) as Prepaid,
SUM(IF(p.payment_terms = 'collect', p.amount, NULL)) as Collect
FROM manifest_waybill mw
JOIN waybill w
on w.waybill_number = mw.waybill_number
LEFT JOIN payment p
on p.waybill_number = mw.waybill_number
JOIN customer c1
on c1.customer_id = w.consignee
JOIN customer c2
on c2.customer_id = w.consignor
WHERE manifest_number = 103
GROUP BY mw.waybill_number WITH ROLLUP

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

я хочу, чтобы результат был таким:

накладная № | грузополучатель | грузоотправитель |

1216415 | A | B |

1216416 | C | D |

1216417 | E | F |

что происходит, это:

накладная № | грузополучатель | грузоотправитель |

1216415 | E | F |

1216416 | E | F |

1216417 | E | F |

значение последней строки (121617) повторяется в каждой строке

0

Решение

Если я правильно понимаю, просто используйте case заявление:

SELECT IFNULL(p.waybill_number,  'GrandTotal' ) AS Waybill,
(CASE WHEN p.waybill_number IS NOT NULL THEN w.consignee END) as consignee,
(CASE WHEN p.waybill_number IS NOT NULL THEN w.consignor END) as consignor,
SUM(IF(p.payment_terms =  'prepaid', p.amount, NULL ) ) AS Prepaid,
SUM(IF( p.payment_terms =  'collect', p.amount, NULL ) ) AS Collect
FROM payment p JOIN
waybill w
ON p.waybill_number = w.waybill_number
GROUP BY p.waybill_number WITH ROLLUP;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]