在我們的數據庫中,我們有一些使用十進制日期格式的表格:yyyymmdd,全部作爲一個大小數(即今天將是20130225)。我正在嘗試創建一個SQL查詢,以每月一桶的方式將事情拉回。從我的研究中看來,最好的方法是將數字除以100以截斷最右邊的日期(20130225/100等於201302,如果餘數被移除)。劃分「SELECT列表中的表達式無效」。
我似乎無法弄清楚如何使其功能。我開始在我的Select和Group by中使用類似(INVOICE_DATE/100) As "INVOICE_MONTH"
的東西。當沒有工作時,我把集團減少到"INVOICE_MONTH"
,然後到(INVOICE_DATE/100)
,這兩者都沒有工作。所以我把選擇和分組減少到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網站上的文檔,但是我一定是在錯誤地閱讀它,因爲它似乎沒有按預期發揮作用。
無論如何。基本的需求是能夠將信息以月度桶的形式返回。所以,如果你知道另一種方法,那麼可以實現的是可以接受的。我希望能夠使用小數部分來提取年/日期組合並在Group By中使用它來獲得我需要的結果。
PS-我們正在使用DB2的v5.1 for i。
'月(Invoice_Date)'不提取月份?如果不是,那麼你能否確認Field的數據類型是什麼? – xQbert 2013-02-25 14:15:02
選擇列表中的哪個表達式是在抱怨? (逐一刪除它們直到它工作) – 2013-02-25 14:17:32
@xQbert日期包含爲小數。我認爲我們不能在小數點上使用日期算術? – 2013-02-25 14:22:05