複数の行に値を分散する簡単な方法はありますか?
たとえば、私のテーブルには
請求済み支払済み現在のタイプ チャージ1000100 チャージ1000100 チャージ1000100 支払い02500 支払い0250
データはこの方法でインポートされますが、インポートされた支払いトランザクションに基づいて、そのトランザクションに必要なものを列Current
と列に入力する必要があります。Paid
Current
各レコードの列のバランスを決定するクエリを作成する簡単な方法はありますか?
たとえば、250は最初の2つのレコードに100を適用し、次の2つのレコードに50を適用し、25は最後のレコードに適用されるためCurrent
、テーブルの残高を更新した後の最終結果は次のようになります。
請求済み支払済み現在のタイプ チャージ1001000 チャージ1001000 充電1007525 支払い02500 支払い0250
理想的には、カーソルを使用して各アイテムを個別に処理するのではなく、単一のクエリでこれを実行したいと思います。Row_Number()関数を使用して、2つのサブクエリを結合することでこれを実行しようとしていますが、ここで何かが不足していることがわかります。
これが私の最初の試みで、現在の残高の現在の合計を取得することになりました
;with cte(invoiced, paid, current)
as (
select invoiced, paid, current
, row_number() over (order by datecreated)
from mytable
)
select t1.invoiced, t1.paid, sum(t2.invoiced - t2.paid) as [current]
from cte as t1
join cte as t2 on t1.number = t2.number and t2.rownum <= t1.rownum
group by t1.uid, t1.number, t1.rownum
order by t1.rownum
結果:
請求済みの支払済み現在 100 0100 100 0200 100 0300 0 250 50 0 25 25
これを行う方法があると確信していますが、今のところ私の脳はストライキをしているようで、解決策を考え出すことを拒否しています。