我在Access 2016工作,我想知道是否有一个聚合函数给我一个值,但只有当组中的行的值相同时,否则为null。
例如,我有一个账单清单,每个账单都有项目。 (只是一个简单的例子)
Table BILLS
- ID int
- NAME varchar(100)
- ...
Table ITEMS
- ID int
- FK_BILL_ID int
- PRICE currency
- PAID bool
- ...
我的查询如下:
select b.NAME as Name, sum(i.PRICE) as PriceSum, ????(i.PAID) as PayStatus
from BILLS b
left join ITEMS i on i.FK_BILL_ID = b.ID
group by b.ID, b.NAME
我想要实现的目标:
Name | PriceSum | PayStatus
-------+----------+-------------
Bill A | 19,99 | true
Bill B | 12,34 | false
Bill C | 9,99 | null
Bill D | 99,99 | null
答案 0 :(得分:0)
鉴于MS Access布尔字段将True存储为-1,将False存储为0,我们可以编写查询,如下所示
SELECT b.BillNAME as BillName,
SUM(i.PRICE) AS PriceSum, IIF(SUM(PAID) =0, "FALSE", IIF( count(*)*-1
=sum(PAID), "TRUE", "NULL")) as PayStatus
FROM BILLS b
left join ITEMS i on i.FK_BILL_ID = b.ID
GROUP BY BillName;
请注意,由于名称是MS Access中的保留字,我已将字段名称更改为BillName。
答案 1 :(得分:0)
付费字段是/否类型? 在聚合查询中尝试表达式,如:
PayStatus: Switch(Count(*)=Abs(Sum([Paid])),"True", Sum([Paid])=0,"False", True,Null)
名称是保留字。不应该使用保留字作为名称。
当Alok回答时,我正在创作。伟大的思想....虽然只是乘以-1可能比调用Abs()函数更好。