在我们的数据库中,我们有一些使用十进制日期格式的表格:yyyymmdd,全部为一个大小数(即,今天是 20130225)。我正在尝试创建一个 SQL 查询,将内容拉回每月存储桶中。根据我的研究,似乎最好的方法是将数字除以 100 以截断最右边的天数(如果去掉余数,则 20130225/100 等于 201302。)
我似乎无法弄清楚如何让它发挥作用。我开始(INVOICE_DATE/100) As "INVOICE_MONTH"
在我的 Select 和 Group by 中使用类似的东西。当那不起作用时,我将 Group 减少了 to"INVOICE_MONTH"
然后 to (INVOICE_DATE/100)
,这两个都不起作用。因此,我将 Select and 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 网站上的文档,但我一定是读错了,因为它似乎没有按预期运行。
好歹。基本需求是能够将信息提取到每月存储桶中。因此,如果您知道另一种方法,那么这可能是可以接受的。我希望能够只使用小数除法来提取年份/日期组合,并在 Group By 中使用它来获得我需要的结果。
PS-我们正在使用 v5,1 的 DB2 for i。