私たちのデータベースには、これらの行に沿って 10 進数の日付形式を使用するいくつかのテーブルがあります: yyyymmdd、すべて 1 つの大きな 10 進数として (つまり、今日は 20130225 になります)。毎月のバケットに戻す SQL クエリを作成しようとしています。私の調査によると、数字を 100 で割り、右端の日を切り捨てるのが最善の方法のようです (残りを削除すると、20130225/100 は 201302 に等しくなります)。
私はそれを機能させる方法を理解できないようです。(INVOICE_DATE/100) As "INVOICE_MONTH"
Select と Group by の両方で、次のようなものを使用することから始めました。それがうまくいかなかったとき、グループを に減らしてから に減らしました"INVOICE_MONTH"
が(INVOICE_DATE/100)
、どちらもうまくいきませんでした。そのため、Select と Group by を削減しましたが、INVOICE_DATE/100
まだ機能していないようです。
これが現在の私のコードです(いくつかの小さな編集があります)
Select Count(COMPETITOR_NAME) as "STORE COUNT",
COMPETITOR_NAME,
INVOICE_DATE/100,
CUSTOMER_NUMBER,
OVERRIDE_TYPE,
Sum (QTY_SOLD) as "Quantity Sold",
Sum (EXT_ORIGINAL_PRICE) as "Sum Original Price",
Sum (EXT_OVERRIDE_PRICE) as "Sum Override Price",
Sum (EXT_VARIANCE) As "Sum Variance",
Sum (INTERNAL_COST) as "Internal Cost"
From DA*****.DW*******.PRCOVRWK
Where INVOICE_DATE/100 between 201002 and 201302
Group By ROLLUP(COMPETITOR_NAME,
INVOICE_DATE/100),
OVERRIDE_TYPE,
CUSTOMER_NUMBER
Order By OVERRIDE_TYPE,
COMPETITOR_NAME,
INVOICE_DATE,
CUSTOMER_NUMBER
私の Where ステートメントも問題を引き起こしているのではないかと思わずにはいられません。最初は だけを使ってWhere INVOICE_DATE between 20100225 and 20130225
いたのですが、Select ステートメントと同じものを使用する必要があるのではないかと思いました。(ええ、私はこの時点で少し手を伸ばしています。) IBM の Web サイトのドキュメントに従うために最善を尽くしてきましたが、期待どおりに機能していないように見えるので、間違って読んでいるに違いありません。
とにかく。基本的なニーズは、情報を毎月のバケットに戻すことができることです。したがって、別のアプローチを知っていれば、それが達成される可能性があります。私の希望は、10 進数の除算を使用して年/日付の組み合わせを取得し、それを Group By で使用して必要な結果を取得できるようにすることです。
PS- DB2 for i の v5,1 を使用しています。