返回具有不同和值的行

时间:2017-06-19 16:19:09

标签: sql postgresql

我上面有这张表。如果我将余额值相加,我将得到23.47。

Date        num (pk)    document    supplier    debit       credit      balance    
2016-12-06  4302458     26933       SUPPLIER_1  4,35                    4,35       
2016-12-06  4302456     26933       SUPPLIER_1  19,12                   19,12      
2016-12-13  4330098     27023       SUPPLIER_1  5,79                    5,79       
2016-12-13  4330096     27023       SUPPLIER_1  25,45                   25,45      
2016-12-13  4330095     27023       SUPPLIER_1              1.157,00    -1.157,00  
2016-12-13  4330591     223130      SUPPLIER_1  1.115,76                1.115,76   
2016-12-13  4330588                 SUPPLIER_1  10,00                   10,00      
2016-12-19  4342835     27108       SUPPLIER_1              1.294,00    -1.294,00  
2016-12-19  4342838     27108       SUPPLIER_1  6,47                    6,47       
2016-12-19  4342836     27108       SUPPLIER_1  28,47                   28,47      
2016-12-22  4366603     223841      SUPPLIER_1  1.259,06                1.259,06   
2016-12-26  4371509     27200       SUPPLIER_1  14,61                   14,61      
2016-12-26  4371511     27200       SUPPLIER_1  3,32                    3,32       
2016-12-26  4371508     27200       SUPPLIER_1              664,00      -664,00    
2016-12-29  4376366     224598      SUPPLIER_1  646,07                  646,07     

我正在尝试选择余额之和为23.47的行。在这个例子中,这些是吗?

Date        num (pk)    document    supplier    debit       credit      balance    
2016-12-06  4302458     26933       SUPPLIER_1  4,35                    4,35       
2016-12-06  4302456     26933       SUPPLIER_1  19,12                   19,12 

我尝试使用HAVING CLAUSE但回复不正确。 我也尝试了PGSQL function,但没有用。 有没有办法正确选择?

1 个答案:

答案 0 :(得分:1)

我不确定如果没有编写程序这是否是最干净的方法,但它会起作用。这使用创建的列作为连接将表连接到自己。

SELECT 'join' as link, a.Date, a.num, a.document, a.debit, a.credit 
FROM test a

INNER JOIN (
    SELECT 'join' as link, a.Date, a.num, a.document, a.debit, a.credit FROM test a
)b

ON 'join' = b.link
WHERE a.debit + b.debit = 23.47