###前提・実現したいこと
以下のようなテーブルがあります。
|入出キー|品番|区分|単価1|数量1|単価2|数量2|入出額|差分
|:--|:--:|--:|
|1|N0001|1|141|320|142|220|76360|0
|2|N0001|2|NULL|40|NULL|NULL|5640|0
|3|N0001|1|138|500|NULL|NULL|69000|0
|4|N0001|2|NULL|100|NULL|NULL|14100|0
|5|N0001|2|NULL|200|NULL|NULL|28220|0
|6|N0001|2|NULL|50|NULL|NULL|7100|0
|7|N0001|2|NULL|650|NULL|NULL|90300|0
入出キー :レコード毎にふられている数字
品番 :品物に付けられている番号
区分 :入荷・出荷の区分 1=入荷、2=出荷
単価1 :入荷時の単価1
数量1(区分1の場合):単価1の金額で入荷した数量
数量1(区分2の場合):過去の入荷分(在庫)から出荷した数量
単価2 :入荷時の単価2
数量2(区分1の場合):単価2の金額で入荷した数量
数量2(区分2の場合):過去の入荷分(在庫)から数量1とは違う単価で出荷した数量
入出額 :入荷または出荷した金額
差分 :(単価×数量)と入出額を比較した差分
※品番でGROUP BYしており、品番は全部で10000程あります。
###やりたいこと
品番ごとの各レコードの単価と数量をもとに額を出して、入出額と差分があるものを抽出したいです。
上記の表は、基本的に『(単価1×数量1)+(単価2×数量2)=入出額』のような考え方になります。
ただ、単価に関しては、「先に入荷したものから出荷する」ので、出荷する数量によっては2重の単価になります。
以下に例を記載します。
●入出キー1
(141×320)+(142×220)=76360
●入出キー2
(141×40)=5640 ←単価は入出キー1の単価1で入荷した数量から40個
●入出キー3
(138×500)=69000
●入出キー4
(141×100)=14100 ←単価は入出キー1の単価1で入荷した数量から100個
●入出キー5
(141×180)+(142×20)=28220 ←単価は入出キー1の単価1で入荷した数量から180個。単価1の数量を使い切ったので入出キー1の単価2で入荷した数量から20個
●入出キー6
(142×50)=7100 ←単価は入出キー1の単価2で入荷した数量から50個
●入出キー7
(142×150)+(138×500)=90300 ←単価は入出キー1の単価2で入荷した数量から150個。単価2の数量を使い切ったので、入出キー3の単価1で入荷した数量から500個
区分2(出荷)は、使用されている単価がレコードによって違う場合があるため、『(単価1×数量1)+(単価2×数量2)=入出額』では単純に算出することが出来ません。
Excelにデータを吐き出して抽出しようとしたところ、上長よりSQLで一覧にして欲しいとの指定があり、やり方が思いつきません。
いいやり方はありませんでしょうか?
上記の表は品番は1種類なのですが、実際のデータでは品番ごとにレコード数は1~50レコードほどのデータになっており、レコード数は統一されていません。
###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft SQL Server 2008 R2
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/27 01:15