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