Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有附加列的SQL数据透视表_Php_Mysql_Codeigniter_Pivot Table - Fatal编程技术网

Php 带有附加列的SQL数据透视表

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

我正在为一家小型快递公司使用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
但这会在最后一行显示收货人和收货人的值。我只想在最后一行显示所有“预付”和“收款”交易的总计。我希望你能帮忙

提前感谢

更新:: 我已经编辑了我的查询,现在看起来像这样

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。请帮帮我。