Oracle有没有可以拉动风险的方法?我用下面的脚本只拉了两个风云。 Mytable日期范围从1998财政年度到2009财年。
SELECT 'FY2008' as FY,
Site,
COUNT(*)
FROM mytable
WHERE date >='10-OCT-2007'
AND date <'10-OCT-2008'
GROUP BY site
SELECT 'FY2008' as FY,
Site,
COUNT(*)
FROM mytable
WHERE date >='10-OCT-2008'
AND date <'10-OCT-2009'
GROUP BY site
拉两个FY是可以的,但是当拉动超过10个FY时它太重复了。
答案 0 :(得分:8)
将83天添加到您的日期并将其截断为全年:
select 'FY'||TRUNC(date + 83, 'YYYY') as FY, Site, count(*)
from mytable
group by 'FY'||TRUNC(date + 83, 'YYYY'), site
答案 1 :(得分:2)
假设使用Oracle 9i +,请使用CASE表达式:
SELECT CASE
WHEN TO_CHAR(t.date, ) = 10 AND EXTRACT(DAY FROM t.date) >= 10 THEN
'FY' || EXTRACT(YEAR FROM t.date) + 1
WHEN TO_CHAR(t.date, ) > 10 THEN
'FY' || EXTRACT(YEAR FROM t.date) + 1
ELSE
'FY' || EXTRACT(YEAR FROM t.date)
END AS FY,
t.site,
COUNT(*)
FROM YOUR_TABLE t
GROUP BY t.site, FY
答案 2 :(得分:2)
为了完整性,除了@eumiro回答。在7月1日至6月30日有财政年度的国家(如澳大利亚),您可以用 184 替换83。
答案 3 :(得分:1)
一些选择:
您可以在此处使用to_char函数。请查看此链接以获取解释: http://www.techonthenet.com/oracle/functions/to_char.php
您也可以尝试使用案例陈述
select case when date >='10-OCT-2007' and date <'10-OCT-2008' then 'FY08'
when date >='10-OCT-2008' and date <'10-OCT-2009' then 'FY09'
else 'Other' end as fiscal_year, count(*)
from mytable
group by case when date >='10-OCT-2007' and date <'10-OCT-2008' then 'FY08'
when date >='10-OCT-2008' and date <'10-OCT-2009' then 'FY09'
else 'Other' end
最终,如果您具有创建表权限,则可能需要考虑创建日期查找表。在数据仓库指南中搜索“日期维度”。
例如:
你的桌子会有
date,date_desc,fiscal_year等....
那么你可以按财政年度或其他任何你想要的方式加入和分组。
答案 4 :(得分:0)
以下是另一种方法,可以轻松确定7月至6月财政年度的财政年度:
SELECT 'FY'||TO_CHAR(ROUND(your_date_here,'YEAR'),'YY') AS FY