我试图根据同一个表中的ProductID,在新的列中获取"现金"、"支票"和"信用卡"总数.

表-付款

+-----------+------------+---------------+--------+
| ProductID |  SaleDate  | PaymentMethod | Amount |
+-----------+------------+---------------+--------+
|         3 | 2012-02-10 | Cash          |     10 |
|         3 | 2012-02-10 | Cash          |     10 |
|         3 | 2012-02-10 | Check         |     15 |
|         3 | 2012-02-10 | Credit Card   |     25 |
|         4 | 2012-02-10 | Cash          |      5 |
|         4 | 2012-02-10 | Check         |      6 |
|         4 | 2012-02-10 | Credit Card   |      7 |
+-----------+------------+---------------+--------+

期望输出-

+------------+------+-------+-------------+-------+
| ProductID  | Cash | Check | Credit Card | Total |
+------------+------+-------+-------------+-------+
|          3 |   20 |    15 |          25 |    60 |
|          4 |    5 |     6 |           7 |    18 |
+------------+------+-------+-------------+-------+

我试着离开,加入同一张桌子,但没有成功.如有任何建议,将不胜感激.谢谢

不成功和不完整的try -

SELECT P.ProductID, Sum( PCash.Amount ) AS 'Cash', SUM( PCheck.Amount ) AS 'Check', SUM( PCredit.Amount) AS 'Credit Card' 
FROM Payments AS P 
LEFT JOIN Payments AS PCash ON P.ProductID = PCash.ProductID AND PCash.PaymentMethod = 'Cash'
LEFT JOIN Payments AS PCheck ON P.ProductID = PCheck.ProductID AND PCheck.PaymentMethod = 'Check'
LEFT JOIN Payments AS PCredit ON P.ProductID = PCredit.ProductID AND PCredit.PaymentMethod = 'Credit'
WHERE P.SaleDate = '2012-02-10' GROUP BY ProductID;

推荐答案

我觉得你把事情弄得有点复杂了.

SELECT
    ProductID,
    SUM(IF(PaymentMethod = 'Cash', Amount, 0)) AS 'Cash',
    -- snip
    SUM(Amount) AS Total
FROM
    Payments
WHERE
    SaleDate = '2012-02-10'
GROUP BY
    ProductID

Mysql相关问答推荐

括号在SQL查询中的作用?

了解查询中ORDER BY的行为

我可以指示MariaDB-Install-db和MariaDB忽略配置中的用户设置吗?

SQL/Pyspark -判断条件

使用复合主键更新后的MySQL触发器失败

如何合并有多行的json列

使用mysql查询获取不关注user1的user3

计算同一个表中的两列,然后将两者都算作总数

Mysql,显示谁已经和没有 Select 退出巴士服务

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

MySQL 8 - MBRContains 不使用空间索引

MySql中的可见索引和不可见索引是什么

查询以从约会表中获取可用空档

MySQL - 考虑到所有前几天,每天计算唯一用户

MySQL时区更改?

mysql中float(2,2)和float()的区别

如何使用 SQL 数据库中的经纬度查找最近的位置?

如何在 MySQL 中删除此索引?

在 MySQL 中仅 Select 仅包含字母数字字符的行

Mysql 错误:try 转储表空间时,指定为定义者的用户 ('mysql.infoschema'@'localhost') 不存在'