问题描述
我正在尝试在Oracle PL/SQL中创建一个日历,我需要两个日历: 会计年度日历和普通日历。我已经使用代码创建了它们:
会计年度日历:
在我的查询中,如果我想指定会计年度日历,我该怎么做?如何使用此日历创建表以在查询中引用,如果我想存储时间序列数据,Oracle中是否有任何规定?这里的任何帮助将不胜感激。谢谢!!
会计年度日历:
WITH dts AS (SELECT TRUNC(to_date('&year', 'yyyy'), 'yyyy') + LEVEL + 181 AS dt
FROM dual
CONNECT BY LEVEL <= to_char(TO_DATE(&YEAR || '1231', 'yyyymmdd'), 'ddd')),
-- dt_mon AS (SELECT '7' from dual),
dts2 AS (SELECT dt,
TRUNC(dt, 'mm') dt_mon,
TRUNC(dt, 'iw') dt_start_of_week,
to_char(dt, 'fmdd') day_of_month
FROM dts)
SELECT to_char(dt_mon, 'fmMonth') "MONTH",
row_number() OVER (PARTITION BY to_char(dt_mon, 'fmMonth') ORDER BY dt_start_of_week) week_num,
MAX(CASE WHEN dt = dt_start_of_week THEN day_of_month END) mon,
MAX(CASE WHEN dt = dt_start_of_week + 1 THEN day_of_month END) tue,
MAX(CASE WHEN dt = dt_start_of_week + 2 THEN day_of_month END) wed,
MAX(CASE WHEN dt = dt_start_of_week + 3 THEN day_of_month END) thu,
MAX(CASE WHEN dt = dt_start_of_week + 4 THEN day_of_month END) fri,
MAX(CASE WHEN dt = dt_start_of_week + 5 THEN day_of_month END) sat,
MAX(CASE WHEN dt = dt_start_of_week + 6 THEN day_of_month END) sun
FROM dts2
GROUP BY dt_mon,
to_char(dt_mon, 'fmMonth'),
dt_start_of_week
ORDER BY dt_mon, dt_start_of_week;在我的查询中,如果我想指定会计年度日历,我该怎么做?如何使用此日历创建表以在查询中引用,如果我想存储时间序列数据,Oracle中是否有任何规定?这里的任何帮助将不胜感激。谢谢!!
专家解答
并不是因为 “财政” 年度的定义完全是使用它的组织的心血来潮。
我曾在4月的财政年度开始的地方和7月的其他地方工作过。同样,我在财政周从星期一开始的地方工作,其他地方则在星期五工作。我甚至在某些财政周的天数每年都在变化的地方工作,因为一年的第一天是在不同的一天开始的,所以他们把 “第8天” 塞进了一周的商业报告。
没有单一的 “财政” 年度。最终,大多数地方做你上面做的事情,即有一个表,它存储真实的日历,它映射到该公司的财政日历,并使用它 (通常) 作为维度表报告。
例如,这是我与之合作的客户的 (匿名) 片段。
我曾在4月的财政年度开始的地方和7月的其他地方工作过。同样,我在财政周从星期一开始的地方工作,其他地方则在星期五工作。我甚至在某些财政周的天数每年都在变化的地方工作,因为一年的第一天是在不同的一天开始的,所以他们把 “第8天” 塞进了一周的商业报告。
没有单一的 “财政” 年度。最终,大多数地方做你上面做的事情,即有一个表,它存储真实的日历,它映射到该公司的财政日历,并使用它 (通常) 作为维度表报告。
例如,这是我与之合作的客户的 (匿名) 片段。
CREATE TABLE DATE_REPORTING ( ,CAL_DATE DATE NOT NULL ,CAL_MONTH_START DATE NOT NULL ,CAL_MONTH_END DATE NOT NULL ,CAL_MONTH_OF_YEAR NUMBER(2) NOT NULL ,CAL_MONTH_OF_FIN_YEAR NUMBER(2) NOT NULL ,CAL_MONTH_NAME_ABBR VARCHAR2(3) NOT NULL ,CAL_MONTH_NAME VARCHAR2(20) NOT NULL ,CAL_QTR_START DATE NOT NULL ,CAL_QTR_END DATE NOT NULL ,CAL_YEAR NUMBER(4) NOT NULL ,CAL_DAY_OF_MONTH NUMBER(3) NOT NULL -- ,DAY_OF_WEEK_ABBR VARCHAR2(3) NOT NULL ,DAY_OF_WEEK VARCHAR2(10) NOT NULL ,FIN_DAY_OF_WEEK NUMBER(2) NOT NULL -- ,FIN_WEEK_OF_MONTH NUMBER(2) NOT NULL ,FIN_WEEK_OF_YEAR NUMBER(2) NOT NULL ,FIN_WEEK_START DATE NOT NULL ,FIN_WEEK_END DATE NOT NULL ,FIN_SETTLEMENT_PERIOD_SEQ NUMBER(10) -- ,FIN_MONTH_NAME VARCHAR2(10) NOT NULL ,FIN_MONTH_NAME_ABBR VARCHAR2(3) NOT NULL ,FIN_MONTH_OF_YEAR NUMBER(2) NOT NULL ,FIN_MONTH_START DATE NOT NULL ,FIN_MONTH_END DATE NOT NULL ,FIN_MONTH_WEEKS NUMBER NOT NULL -- ,FIN_QTR_START DATE NOT NULL ,FIN_QTR_END DATE NOT NULL -- ,FIN_YEAR NUMBER(4) NOT NULL ,FIN_YEAR_NAME VARCHAR2(8) NOT NULL ,FIN_YEAR_START DATE NOT NULL ,FIN_YEAR_END DATE NOT NULL ... ... ...
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




