2017-06-13 28 views
0

我在使用Access 2016,我想知道是否有一個聚合函數給了我一個值,但只有當這些值對於行的值相同時在該組中,否則爲空。SQL彙總函數,顯示組中是否具有同類值

例如,我有一個帳單清單,每個帳單都有物品。 (只是一個簡單的例子)

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 
  • 現場PayStatus應該是真實的,如果所有項目都支付(PAID = true)
  • 如果所有項目都不是全部項目,則PayStatus字段應該爲false支付(支付= FALSE)
  • Otherways,PayStatus爲空(如果沒有項目,或者如果只有一部分項目進行支付)

回答

0

鑑於MS訪問布爾字段存儲真正爲-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。

0

是付費領域a是/否類型?在彙總查詢 嘗試的表達,如:

PayStatus: Switch(Count(*)=Abs(Sum([Paid])),"True", Sum([Paid])=0,"False", True,Null)

名稱是一個保留字。不應該使用保留字作爲名稱。

當Alok回答時,我正在作曲。偉大的思想......雖然乘以-1可能比調用Abs()函數更好。