2014-04-15 115 views
0

我的數據庫中包含一些我需要計算積分和獎勵的交易的下表。 每當發生TxType A時,我應該記錄10分。 然後,我必須從這些點中減去PP列的值,每次出現TxType B時。 當計算結果爲零時,就會獲得獎勵。SQL查詢計數(遞歸)

ID TxType PP 
1  A 0 
2  B 2 
3  B 1 
4  B 1 
5  B 1 
6  B 3 
7  B 1 
8  B 1 
9  A 0 
10 B 4 
11 B 3 
12 B 2 
13 B 1 
14 A 0 
15 B 2 

我已創建SQL查詢以calc下點作爲遵循

SELECT SUM(
    CASE 
     WHEN TxType = 'A' THEN 10 
     WHEN TxType = 'B' THEN (PP * -1) 
    END) 
FROM myTable 

該查詢返回的8值,而這正是基於樣本數據點的數量。 如何計算髮生的獎勵(在給定示例中爲2)?

感謝您使用相關子查詢幫助做計算(在SQL Server 2008)

+0

可惜這是2008年 – dean

+0

你能否澄清*「該查詢返回值爲8,這正好是基於樣本數據的點數如何計算髮生的獎勵(在給定示例中爲2)?「*查詢返回整個數據集。所以很難說出你在說什麼。 – Khan

+0

@Khan:對不起,但我的查詢只是返回一個值,而不是整個數據集。你錯過了SUM功能嗎?結果8來自30(每個類型A tx的值)小於22(tx類型B時的PP總和) – Lorenzo

回答

1

要完成Gordon Linoff的答案,你只需要統計記錄,其中TheSum0獲得許多獎勵是如何發生的:

SELECT COUNT(1) 
FROM (
    SELECT ID, 
      TxType, 
      PP, 
      ( SELECT SUM(CASE TxType WHEN 'A' THEN 10 WHEN 'B' THEN -PP END) 
       FROM #myTable t2 
       WHERE t2.id <= t1.id 
      ) AS TheSum 
    FROM #myTable t1 
) Result 
WHERE TheSum = 0 
3

方式一:

select t.*, 
     (select sum(case when TxType = 'A' then 10 
         when TxType = 'B' then PP * -1 
        end) 
     from mytable t2 
     where t2.id <= t.id 
     ) as TheSum 
from mytable t; 

你可以再申請的時候值爲0時會發生什麼邏輯。在SQL Server 2012中,您可以使用累積和。

+0

我認爲你在'where t2.id <= t.id'後面缺少''''' – Khan

+0

@Khan。 。 。謝謝。 –

+0

Yw .. +1,從我可以告訴。這正是我期待的OP所期待的。 – Khan