2015-11-02 15 views
0
SELECT TYPE, TERMINAL, PERIOD_NUMBER, WEEK, DM FROM 
(SELECT 'ACTUAL' AS TYPE, TERMINAL, PERIOD_NUMBER, "WEEK", SUM(CASE WHEN TYPE = 'REVENUE' THEN TOTAL ELSE 0 END - CASE WHEN TYPE = 'EXPENSE' THEN TOTAL ELSE 0 END) DM FROM BT_CU_DM_TERMINAL 
WHERE TERMINAL NOT IN ('99','88') 
GROUP BY TERMINAL, PERIOD_NUMBER, "WEEK" 
UNION 
SELECT 'BUDGET' AS TYPE, RIGHT(GL_ACCT_ID, 2) TERMINAL, PERIOD_NUMBER, WEEK(CURRENT DATE - 5 DAYS) "WEEK", 
CASE WHEN WEEK(CURRENT DATE - 5 DAYS) IN (40, 41, 42, 43, 44, 53,1,2,3,4,5, 14,15,16,17,18,27,28,29,30,31) THEN BUDGET_AMT/5 ELSE BUDGET_AMT/4 END DM FROM GL_BUDGETS WHERE 
FISCAL_YEAR_CODE = '2015' AND GL_ACCT_ID LIKE '01-6999-%' 
ORDER BY PERIOD_NUMBER, WEEK, TERMINAL) 

我正在使用DB2,并试图找到一个适当的WHERE子句,以便动态获取当前的一周;无论何时使用此声明。例如,我们在第44周;然而,当下周流行时,我希望它显示为本周。如何选择特定的日期范围?

谢谢!

+0

我试过使用WHERE WEEK = CURRENT_WEEK,但出现错误Current_week在使用它的上下文中无效 – OVO

+0

如果您有日历表,这将非常容易。除此之外,还有不止一种类型的“周”。你想要哪一个? ISO年度周(“第一周”有时会在上一年的12月份开始),自1月1日以来的几周(上周是1或2天),还是一个“财政周”,哪一个都不受?请注意,一周的第一天是依赖于文化的(尽管我认为DB2实际上只使用星期一)。 –

回答

0

本周可通过week(current date)获得。

+0

对,不幸的是我已经返回一周的结果;但是我需要显示当前的星期数据! – OVO

+0

在上面的评论中,您要求提供“当前周”。也许回过头来编辑这个问题更重要,你究竟在问什么。你想重写查询吗?你想改变整个WHERE子句吗? ... –

+0

道歉,我目前正在提供显示投影和预算的数据,它基于两件事情:一周到一天和一个月。我已经包装了我的两个前面的子句来得出结果。不过,我想进一步指定我正在使用哪个星期! – OVO

相关问题