SQL充电反转数据

时间:2017-09-14 20:44:12

标签: sql

我提取财务信息,但遇到了收费反转信息。基本上,如果有人收取服务费用,那么就会有一个列收费。如果电荷稍后被反转,则会有另一行具有完全相同的数据,但其上带有电荷反转标记。我想只收取根本未被撤销的指控。 以下是我的意思和需要的一个例子。正如您所看到的,如果电荷是反转,则RVSLInd列的值为1。 0表示初始充电

我无法做到:从表中选择*,其中rvslInd = 0.因为这样只能摆脱反转行。

RvslInd|ExtPriceAmt 
-------| ----------|
   0   |  155.70   |
   0   |  1.50     |
   0   |  239.00   |
   0   |  1111.00  |
   1   | -1111.00  |
   0   |  217.00   |
   0   |  1491.00  |
   1   | -1491.00  |
   0   |  388.00   |
   0   |  72.00    |

这是我希望能够回来的:

RvslInd|ExtPriceAmt 
-------| ----------|
   0   |  155.70   |
   0   |  1.50     |
   0   |  239.00   |
   0   |  217.00   |
   0   |  388.00   |
   0   |  72.00    |

这将是我添加了客户专栏的新表:

CustomerID|RvslInd|ExtPriceAmt 
----------|-------| ----------|
    1     |   0   |  155.70   |
    1     |   0   |  1.50     |
    1     |   0   |  239.00   |
    2     |   0   |  217.00   |
    2     |   0   |  388.00   |
    2     |   0   |  72.00    |

1 个答案:

答案 0 :(得分:1)

鉴于您的数据,您无法可靠地做您想做的事情。对于您显示的数据,您可以执行以下操作:

select ExtPriceAmt
from t
where RvslInd = 0 and
       not exists (select 1 from t t2 where t2.ExtPriceAmt = - t.ExtPriceAmt and t2.RvslInd = 1);

问题在于重复价格。这妨碍了。

尽管如此,一切都不是没有希望的。您可以获得价格清单以及非逆转时间的数量:

select ExtPriceAmt, 
       sum(case when RvslInd = 0 then 1 when RvslInd = 1 then -1 end) as non_reversed_count
from t
group by ExtPriceAmt
having sum(case when RvslInd = 0 then 1 when RvslInd = 1 then -1 end) > 0;