« 商品売上管理表(1) | トップページ | 商品売上管理表(3) »

商品売上管理表(2)

データを読み込むためのSQLそのももは単純なものです。
8種類のテーブルを作って、それぞれSQLでデータを読み込みます。
それをFileMakerで最終的に1つにして、集計をかけて印刷するというのが、大体の段取りです。

しかし、作ってみて気が付いたのは、毎月8種類のSQLの販売日付の数字を変更しなければならないことでした。

日にちの指定を変更するだけなので簡単かと思いきや、これが意外と根気の要る作業です。一個一個スクリプトを開いて、ODBCデータソースに接続して、狭いSQLの編集窓の中でSQLを書き換えるという、かなり手数の多い作業が続きます。絶対どっかミスしそうです。今は期の初めなので、月計も累計も同じ数字になるので間違いを見つけること出来ますが、来月以降累計のミスの発見は至難の業だと思います。それと作業として合理的じゃないというか、美しくないですよね。

参考までに、長い長いSQLを記させてもらいますが、見てるだけでもクラクラきます。

売上月計の集計用

SELECT "販売テーブル"."原価区分","販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量",
SUM("販売テーブル"."税抜売上金額")"月計金額",
SUM("販売テーブル"."原価金額")"月計粗利"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."原価区分","販売テーブル"."商品コード"
ORDER BY "販売テーブル"."商品コード"

売上累計の集計用

SELECT "販売テーブル"."原価区分","販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"累計数量",
SUM("販売テーブル"."税抜売上金額")"累計金額",
SUM("販売テーブル"."原価金額")"累計粗利"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."原価区分","販売テーブル"."商品コード"
ORDER BY "販売テーブル"."商品コード"

原価区分1の月計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量合計1",
SUM("販売テーブル"."税抜売上金額")"月計単価合計1",
SUM("販売テーブル"."原価金額")"月計原価合計1",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分2の月計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量合計2",
SUM("販売テーブル"."税抜売上金額")"月計単価合計2",
SUM("販売テーブル"."原価金額")"月計原価合計2",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='2') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分3の月計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量合計3",
SUM("販売テーブル"."税抜売上金額")"月計単価合計3",
SUM("販売テーブル"."原価金額")"月計原価合計3",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='3') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分1の累計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"累計数量合計1",
SUM("販売テーブル"."税抜売上金額")"累計単価合計1",
SUM("販売テーブル"."原価金額")"累計原価合計1",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分2の累計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"累計数量合計2",
SUM("販売テーブル"."税抜売上金額")"累計単価合計2",
SUM("販売テーブル"."原価金額")"累計原価合計2",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='2') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分3の累計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"累計数量合計3",
SUM("販売テーブル"."税抜売上金額")"累計単価合計3",
SUM("販売テーブル"."原価金額")"累計原価合計3",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='3') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

今考えてるいる方法は、中間表のようなもを作って一気に読み込んでおいて、その後必要なデータを後から加工する方法です。それだと、一つのスクリプトの日にちを変更すれば良いだけでですよね。

中間表はFileMakerで作ってしまったほうが楽に思えますが、シスアドかセキュアドでSQLをやったときに、中間表(仮想表?)を作ってどうのこうのというのがあった記憶があるので、SQLでやってみようと思ってます。もしできなければ、FileMakerで作ることにします。

|

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/41522/8347583

この記事へのトラックバック一覧です: 商品売上管理表(2):

コメント

コメントを書く