请您解释一下我如何创建一个循环函数来给出如下相同的结果,
select to_char(add_months(trunc(sysdate,'MM'),- 0),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 0),'YYYY') today,
to_char(add_months(trunc(sysdate,'MM'),- 1),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 1),'YYYY') date_1,
to_char(add_months(trunc(sysdate,'MM'),- 2),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 2),'YYYY') date_2,
to_char(add_months(trunc(sysdate,'MM'),- 3),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 3),'YYYY') date_3,
to_char(add_months(trunc(sysdate,'MM'),- 4),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 4),'YYYY') date_4,
to_char(add_months(trunc(sysdate,'MM'),- 5),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 5),'YYYY') date_5,
to_char(add_months(trunc(sysdate,'MM'),- 6),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 6),'YYYY') date_6,
to_char(add_months(trunc(sysdate,'MM'),- 7),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 7),'YYYY') date_7,
to_char(add_months(trunc(sysdate,'MM'),- 8),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 8),'YYYY') date_6,
to_char(add_months(trunc(sysdate,'MM'),- 9),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- 9),'YYYY') date_9,
to_char(add_months(trunc(sysdate,'MM'),-10),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),-10),'YYYY') date_10,
to_char(add_months(trunc(sysdate,'MM'),-11),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),-11),'YYYY') date_11
from dual我想把结果填充到列中,就像.

我想用这个回溯到2000年1月,但是,我真的不想重复这些行。而且,每个月我都要添加另一行来覆盖新的一个月。我想知道SQL中是否有类似于DO的循环函数.循环直到在Excel中。
谢谢
SMORF
发布于 2014-10-27 14:19:14
你想要的是:
select * from (
select level-1 as num,
to_char(add_months(trunc(sysdate,'MM'),- (level-1)),'MM')||'-'||to_char(add_months(trunc(sysdate,'MM'),- (level-1)),'YYYY') as dte
from dual
connect by level <= 12
)
pivot (
max(dte) as "DATE"
for num in (0 as "CURRENT", 1 as "1", 2 as "2", 3 as "3", 4 as "4", 5 as "5",6 as "6",7 as "7",8 as "8",9 as "9",10 as "10", 11 as "11"))输出:
CURRENT_DATE 1_DATE 2_DATE 3_DATE 4_DATE 5_DATE 6_DATE 7_DATE 8_DATE 9_DATE 10_DATE 11_DATE
10-2014 09-2014 08-2014 07-2014 06-2014 05-2014 04-2014 03-2014 02-2014 01-2014 12-2013 11-2013发布于 2014-10-27 14:13:11
这太长了,不能发表评论。
SQL查询有固定数量的列。如果你每个月都有一个单独的行,你可以做你想做的事。我会把这个写成这样:
with n as (
select level - 1 as n
from dual
connect by level <= months_between(sysdate, date '2000-01-01')
select to_char(add_months(sysdate, n.n), 'YYYY-MM')
from n;(注:我将格式从MM-YYYY改为YYYY-MM,因为我非常喜欢后者,但如果您愿意,可以保留MM-YYYY。)
生成这些列对于SQL来说是个问题。SQL查询有固定数量的列。要有一个变量号,您需要使用动态SQL。我建议你谷歌“甲骨文动态枢纽”,以获得一些关于如何解决这个问题的想法。
https://stackoverflow.com/questions/26589075
复制相似问题