2017-06-19 11 views
0

私は上記の表を持っています。バランスの値を合計すると、私は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でも試しましたが、うまくいきませんでした。 これを正しく選択する方法はありますか?

+0

これは、「合計がゼロである数値の最大部分集合を見つける」と同等です。私はそれがNPであると確信しています。 SQLには適していません。 –

+0

Linoff、NPはどういう意味ですか? – thiagofred

+1

。 。 https://en.wikipedia.org/wiki/NP_(complexity)。 –

答えて

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 
+0

私はデビットやクレジットの両方で他のサプライヤーの価値を持っているので、最良の方法は手続きを書くことだと思いますが、私はただ一つのスライスに集中しています。私はこの例を試しましたが、私が間違っているかどうかはわかりませんが、その結果は私には期待できない行をもたらします:[link](http://i.imgur.com/3R7Bm5L.png)私は思います私たちは正しい方法でいますが、まだです。 – thiagofred

関連する問題