2015-07-21 31 views
0

請注意,我在MS Access中這樣做,所以使用基本SQL操作符的解決方案將不勝感激。是否有一個SQL查詢將計算一個事件的發生次數,而不是通過正在計數的事件對數據進行分組?

假設您有一張桌子,每一排代表一系列硬幣翻轉投幣。

聲明:我使用硬幣翻轉作爲比喻,所以我不必解釋我的實際數據集。

SELECT * FROM CoinFlips; 

Id Flip  Time 
------------------- 
1  Heads  1 
2  Tails  2 
3  Heads  3 
4  Heads  4 
5  Heads  5 
6  Tails  6 

你會如何編寫返回所有行的上面計數「頭」翻轉發生了該行的出現次數的附加列的查詢。換句話說,這就是我想要的結果看起來像:

所需的輸出

Id Flip  Time NumHeads 
-------------------------------- 
1  Heads  1  1 
2  Tails  2  1 
3  Heads  3  2 
4  Heads  4  3 
5  Heads  5  4 
6  Tails  6  4 

回答

1

爲此在MS Access,你需要一個相關子查詢或加入/匯聚。其他數據庫直接支持此功能,但不支持MS Access。

select cf.*, 
     (select count(*) 
     from CoinFlips as cf2 
     where cf2.flip = 'Heads' and cf2.id <= cf.id 
     ) as NumHeads 
from CoinFlips as cf; 
0

那麼這裏是一個解決方案

SELECT coinFlips.ID 
,coinFlips.Flip 
,coinFlips.TIME 
,DCount("Flip", "coinFlips", "ID <=" & [Time] & "AND Flip ='Heads'") AS CountHeads 
,DCount("Flip", "coinFlips", "ID <=" & [Time] & "AND Flip ='" & [Flip] & "'") AS CountEachOccurence 
FROM coinFlips; 
相關問題