Ms access 是否可以根据字段使用不同的筛选器按查询分组?

Ms access 是否可以根据字段使用不同的筛选器按查询分组?,ms-access,Ms Access,我想知道是否可以根据字段使用多个过滤器进行分组查询: 下面是我想做的一个例子: 我每天有一张桌子: +-------------+--------------+---------------+----------+ | idPay | PayDate | Pay | IsBonus | +-------------+--------------+---------------+----------+ | 1 | 2018-01-12

我想知道是否可以根据字段使用多个过滤器进行分组查询:

下面是我想做的一个例子:

我每天有一张桌子:

+-------------+--------------+---------------+----------+
| idPay       | PayDate      | Pay           | IsBonus  |
+-------------+--------------+---------------+----------+
| 1           | 2018-01-12   | 1000,01       | 0        |
| 2           | 2018-01-26   | 1500,01       | 0        |
| 3           | 2018-01-28   |  100,20       | 1        |
| 4           | 2018-02-04   |  200,55       | 1        |
| 5           | 2018-02-04   | 1200,20       | 0        |
+-------------+--------------+---------------+----------+
我需要按月查询总工资、主要工资和奖金:

+-------------+--------------+---------------+-----------------+
| PayMonth    | TotalPay     | Bonus         | Pay             |
|             | no filter    | isBonus = 1   | isBonus = 0     |
+-------------+--------------+---------------+-----------------+
| 2018-01     | 2600,22      | 100.22        |  1500,02        |
| 2018-02     | 1400,75      | 200.55        |  1200,55        |
+-------------+--------------+---------------+-----------------+
可以在单个查询中执行此操作,还是必须进行多个分组查询

我设法将查询设置为具有前两列,但我不知道如何继续:

 select DateSerial(Year([PayDate]),Month([PayDate]),1) AS PayMonth, Sum(tPay.Pay) AS TotalPay,
 from tPay
 GROUP BY DateSerial(Year([PayDate]),Month([PayDate]),1);
如果你有任何想法,我将非常感激

考虑这个
IIf()
表达式:

IIf(tPay.isBonus=1, tPay.Pay, 0)
isBonus=1
时,表达式返回奖金(支付)金额;否则返回零

因此,对于原始数据的每一行,该表达式返回要添加的值。要在
groupby
级别执行此操作,请将其放入
Sum()
中,如下所示

Sum(IIf(tPay.isBonus=1, tPay.Pay, 0)) AS bonus_pay

这将为您提供第三列所需的内容。对于最后一列,使用类似的逻辑,但将
IIf
条件更改为
isBonus=0

需要更精简的查询--


非常感谢,这正是我想要的。我知道有一种方法可以包含条件,但我确实知道如何…@HansUp,您肯定会同意您在MS Access中的所有经验,现在是数据库方言升级到现代ANSI标准的时候了。请与我一起投票加入Access团队,升级其SQL方言,如可移植的
CASE
语句、一致的
通配符、限制性较小的
JOIN
ON
子句,以及更多。
SELECT Format(PayDate, "yyyy-mm")    AS PayMonth,
       Sum(Pay)                      AS TotalPay,
       Sum(Iif(isBonus = 1, Pay, 0)) AS Bonus,
       Sum(Iif(isBonus = 0, Pay, 0)) AS [Pay-notBonus]
FROM   tPay
GROUP  BY Format(PayDate, "yyyy-mm")