我的数据库中有以下表格,其中包含一些我需要计算点数和奖励的交易。
每当TxType A
出现时,我应记录10分。
然后,每次PP
发生时,我必须从这些点中减去TxType B
列的值。
当计算结果为零时,即可获得奖励。
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
我已经为calc points创建了sql查询,如下所示
SELECT SUM(
CASE
WHEN TxType = 'A' THEN 10
WHEN TxType = 'B' THEN (PP * -1)
END)
FROM myTable
此查询返回值8,这正是基于样本数据的点数。 如何计算发生的奖励(给定示例中为2)?
感谢您的帮助
答案 0 :(得分:3)
使用相关子查询进行计算的一种方法(在SQL Server 2008中):
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中,您可以使用累积总和。
答案 1 :(得分:1)
要完成Gordon Linoff的答案,您只需计算TheSum
为0
的记录,即可获得多少奖励:
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