Php 带有附加列的SQL数据透视表
我正在为一家小型快递公司使用Codeigniter和Mysql构建一个快递系统。我试图做的是构建一个透视表,它将显示每个运单的特定付款类型的总付款,包括总计 我现在有一个问题:Php 带有附加列的SQL数据透视表,php,mysql,codeigniter,pivot-table,Php,Mysql,Codeigniter,Pivot Table,我正在为一家小型快递公司使用Codeigniter和Mysql构建一个快递系统。我试图做的是构建一个透视表,它将显示每个运单的特定付款类型的总付款,包括总计 我现在有一个问题: SELECT IFNULL( p.waybill_number, 'GrandTotal' ) AS Waybill, w.consignee, w.consignor, SUM( IF( p.payment_terms = 'prepaid', p.amount, NULL ) ) AS
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
但这会在最后一行显示收货人和收货人的值。我只想在最后一行显示所有“预付”和“收款”交易的总计。我希望你能帮忙
提前感谢
更新::
我已经编辑了我的查询,现在看起来像这样
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)的值在每一行中重复如果我理解正确,只需使用
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;
哇!我真的很惊讶你的答复如此之快。而且它工作得非常好!!!万分感谢你!戈登爵士,你能解释一下你的问题吗?我试图理解它在做什么,但我很困惑。它工作得很好,但我想知道我的查询出了什么问题,以及为什么你的查询是正确的,这样我就知道下次该怎么做了。谢谢表达式
p.waybill\u number不为空
检查该行是否是由汇总
添加的额外行。如果是这样,那么它会输入NULL
而不是其他值。我已经更新了我的问题。。我想做的是列出装载在舱单中的每个运单中的所有付款。如果尚未付款,则显示NULL。请帮帮我。