Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
列出所有数据,合并重复行,并使用MySQL求和总数_Mysql_Sum_Customcolumn - Fatal编程技术网

列出所有数据,合并重复行,并使用MySQL求和总数

列出所有数据,合并重复行,并使用MySQL求和总数,mysql,sum,customcolumn,Mysql,Sum,Customcolumn,我有以下SQL SELECT i.si_num AS `id`, DATE_FORMAT(i.si_date, '%d-%b-%Y') AS `date`, i.si_tr AS `tr`, d.dl_name AS `customer`, i.si_net_value AS `net`, DATEDIFF(CURDATE(), si_date) AS Days, t.value AS tval, t.label AS label FROM invoices

我有以下SQL

SELECT
  i.si_num AS `id`,
  DATE_FORMAT(i.si_date, '%d-%b-%Y') AS `date`,
  i.si_tr AS `tr`,
  d.dl_name AS `customer`,
  i.si_net_value AS `net`,
  DATEDIFF(CURDATE(), si_date) AS Days,
  t.value AS tval,
  t.label AS label
FROM
  invoices AS i
LEFT JOIN
  dealer AS d ON i.si_tr = d.dl_id
LEFT JOIN
  transactions AS t ON i.si_num = t.invoice
WHERE
  i.si_tr = 'TR580494'
ORDER BY `si_num` DESC;
电流输出

+-----+-----------+----------+---------------------+---------+------+-------+-------+
| id  |   date    |    tr    |      customer       |   net   | Days | tval  | label |
+-----+-----------+----------+---------------------+---------+------+-------+-------+
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790  |   55 | 96070 | acr   |
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790  |   55 | 10080 | crn   |
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790  |   55 | 3640  | crn   |
| 240 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 0       |   60 | NULL  | NULL  |
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975   |   60 | 30405 | acr   |
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975   |   60 | 51570 | crn   |
| 132 | 3-Feb-17  | TR580494 | STARSHIP ENTERPRISE | 38132.5 |   70 | 33282 | acr   |
+-----+-----------+----------+---------------------+---------+------+-------+-------+
+-----+-----------+----------+---------------------+---------+------+-------+-------+
| id  |   date    |    tr    |      customer       |   net   | days |  crn  |  acr  |
+-----+-----------+----------+---------------------+---------+------+-------+-------+
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790  |   55 | 13720 | 96070 |
| 240 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 0       |   60 | NULL  | NULL  |
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975   |   60 | 51570 | 30405 |
| 132 | 3-Feb-17  | TR580494 | STARSHIP ENTERPRISE | 38132.5 |   70 | NULL  | 33282 |
+-----+-----------+----------+---------------------+---------+------+-------+-------+
如您所见,正在生成一些重复的行,如id:404和239 这些行中唯一的区别是“tval”和“label”列中的值

“tval”和“label”列可以为每个id填充不止一次,我试图实现的是,对于每个重复记录,我希望查看标签是“crn”还是“arc”,并将对应于id的值相加,生成一行并将标签转换为列。有关预期输出,请参见下文

预期产出

+-----+-----------+----------+---------------------+---------+------+-------+-------+
| id  |   date    |    tr    |      customer       |   net   | Days | tval  | label |
+-----+-----------+----------+---------------------+---------+------+-------+-------+
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790  |   55 | 96070 | acr   |
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790  |   55 | 10080 | crn   |
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790  |   55 | 3640  | crn   |
| 240 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 0       |   60 | NULL  | NULL  |
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975   |   60 | 30405 | acr   |
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975   |   60 | 51570 | crn   |
| 132 | 3-Feb-17  | TR580494 | STARSHIP ENTERPRISE | 38132.5 |   70 | 33282 | acr   |
+-----+-----------+----------+---------------------+---------+------+-------+-------+
+-----+-----------+----------+---------------------+---------+------+-------+-------+
| id  |   date    |    tr    |      customer       |   net   | days |  crn  |  acr  |
+-----+-----------+----------+---------------------+---------+------+-------+-------+
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790  |   55 | 13720 | 96070 |
| 240 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 0       |   60 | NULL  | NULL  |
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975   |   60 | 51570 | 30405 |
| 132 | 3-Feb-17  | TR580494 | STARSHIP ENTERPRISE | 38132.5 |   70 | NULL  | 33282 |
+-----+-----------+----------+---------------------+---------+------+-------+-------+

您可以在
总和中使用
大小写

SELECT
  i.si_num AS `id`,
  DATE_FORMAT(i.si_date, '%d-%b-%Y') AS `date`,
  i.si_tr AS `tr`,
  d.dl_name AS `customer`,
  i.si_net_value AS `net`,
  DATEDIFF(CURDATE(), si_date) AS Days,
  sum(case when t.label = 'acr' then t.value else null end) as acr
  sum(case when t.label = 'crn' then t.value else null end) as crn
FROM
  invoices AS i
LEFT JOIN
  dealer AS d ON i.si_tr = d.dl_id
LEFT JOIN
  transactions AS t ON i.si_num = t.invoice
WHERE
  i.si_tr = 'TR580494'
GROUP BY  i.si_num,
          DATE_FORMAT(i.si_date, '%d-%b-%Y'),
          i.si_tr,
          d.dl_name,
          i.si_net_value,
          DATEDIFF(CURDATE(), si_date)
ORDER BY `si_num` DESC;

非常感谢Stefano,工作得很有魅力。。。但是抛出了一个小错误,case语句不完整,得到了更正的SUM(case WHEN t.label='acr'然后t.value ELSE NULL END),正如acr感谢mate:)注意到的那样,我编辑了我的答案,并添加了改进