MS Access SQL:按ID分组的具有不同条件的多个和

MS Access SQL:按ID分组的具有不同条件的多个和,sql,ms-access,Sql,Ms Access,我有一个名为demo的表,结构如下 +------------+-------------+--------+ | CustomerID | Transaction | Points | +------------+-------------+--------+ | 1 | Transfer | 230 | | 2 | Accrual | 189 | | 5 | Accrual | 121 | |

我有一个名为demo的表,结构如下

+------------+-------------+--------+
| CustomerID | Transaction | Points |
+------------+-------------+--------+
|          1 | Transfer    |    230 |
|          2 | Accrual     |    189 |
|          5 | Accrual     |    121 |
|          1 | Usage       |    306 |
|          3 | Accrual     |    467 |
|          1 | Expiry      |    328 |
|          2 | Accrual     |    343 |
|          2 | Usage       |    475 |
|          3 | Transfer    |    194 |
|          1 | Accrual     |    459 |
|          5 | Accrual     |    314 |
+------------+-------------+--------+
因此,我想根据交易类型获得具有不同标准的点数之和 所以我所做的是

SELECT *
FROM 
(select sum(points) AS TransferedPoints from Demo where transaction="Transfer" )  AS TTbl,
(select sum(points)   AS PointsAccruals from Demo where transaction="Accrual" )  AS ACTbl,
(select sum(points)   AS PointsUsage from Demo where transaction="Usage")  AS UsTbl,
(select sum(points)AS ExpiredPoints from Demo where transaction="Expiry" )  AS ExTbl;
结果是

+------------------+--------------------+-----------------+-------------------+
| TransferedPoints |     PointsAccruals |     PointsUsage |     ExpiredPoints |
+------------------+--------------------+-----------------+-------------------+
|              424 |               1893 |             781 |               328 |
+------------------+--------------------+-----------------+-------------------+
这很好,但我想用ID来分解它,我不知道怎么做,我希望最终结果是这样的

+-------------+----------------------+--------------------+-----------------+-------------------+
| Customer ID |     TransferedPoints |     PointsAccruals |     PointsUsage |     ExpiredPoints |
+-------------+----------------------+--------------------+-----------------+-------------------+
|           1 |                  230 |                459 |             306 |               328 |
|           2 |                      |                532 |             475 |                   |
|           3 |                  194 |                467 |                 |                   |
|           5 |                      |                435 |                 |                   |
+-------------+----------------------+--------------------+-----------------+-------------------+

谢谢使用条件聚合

SELECT ID, SUM(IIF(transaction = "Transfer", points, 0)) AS TransferedPoints,
       SUM(IIF(transaction = "Accrual", points, 0)) AS AccrualPoints,
       SUM(IIF(transaction = "Usage", points, 0)) AS UsagePoints,
       SUM(IIF(transaction = "Expiry", points, 0)) AS ExpiryPoints
FROM DEMO
GROUP BY ID;
或者,在您的情况下,如果您可以处理四行,请使用
分组依据

select id, transaction, sum(points)
from demo
group by id, transaction;

使用条件聚合

SELECT ID, SUM(IIF(transaction = "Transfer", points, 0)) AS TransferedPoints,
       SUM(IIF(transaction = "Accrual", points, 0)) AS AccrualPoints,
       SUM(IIF(transaction = "Usage", points, 0)) AS UsagePoints,
       SUM(IIF(transaction = "Expiry", points, 0)) AS ExpiryPoints
FROM DEMO
GROUP BY ID;
或者,在您的情况下,如果您可以处理四行,请使用
分组依据

select id, transaction, sum(points)
from demo
group by id, transaction;