0

日付別の購入リストがあります。例えば:

ItemCode、購入日、購入数量

  • XXX、2012年1月1日、10
  • XXX、2012年1月10日、5

アイテムについては、対応する販売取引があります。

アイテム、販売日、販売数量

  • XXX、2012年1月2日、-5
  • XXX、2012年1月9日、-3
  • XXX、2012年1月11日、-3

各発注書の数量の残高を取得するために、SQLクエリ(カーソルなし)を取得しようとしています。つまり、各購入(先入れ先出し)を0まで実行します。(在庫をエージングするため)

購入した各在庫ロットの残りの残高を取得するために、購入を販売に参加させるにはどうすればよいですか?これはカーソルなしで可能ですか?

4

1 に答える 1

1

はい。

union2つのテーブルを一緒に作成し、結果のセットに対して現在の合計を実行します。

   ;with cte as 
   (
       select itemcode, purchasedate as tdate, purchaseqty as qty from purchases
       union
       select itemcode, salesdate, salesqty from sales
   )
   select 
    t1.*,
    SUM(t2.qty)
   from cte t1
    left join cte t2 
        on t1.tdate>=t2.tdate
        and t1.item = t2.item
   group by t1.item, t1.pdate, t1.qty   

特定の時間に在庫を残すために、同じ元本が適用されます。

select p1.*, 
    case when (select SUM(abs(qty)) from sales) > SUM(p2.qty) then 0
    else SUM(p2.qty) - (select SUM(abs(qty)) from sales)  end as stockremaining         
    from purchases p1
    left join purchases p2 on p1.item = p2.item 
    and p2.purchasedate <= p1.purchasedate
group by p1.purchasedate, p1.item, p1.qty

与える

1   2012-01-01    10    0
1   2012-01-10     5    4
于 2012-10-12T09:12:51.887 に答える