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")