Oracle SQL会导致多个列

Oracle SQL会导致多个列,sql,oracle,Sql,Oracle,我有一个单列SQL查询,将输出放在多行中。例如: Select distinct academic_year from AFF_EVENT_V Order by academic_year; 其结果如下: 2002-2003 2003-2004 2004-2005 2005-2006 2006-2007 2007-2008 2008-2009 2009-2010 2010-2011 2011-2012 2012-2013 2013-2014 2014-2015 2015-2016 2016-2

我有一个单列SQL查询,将输出放在多行中。例如:

Select distinct academic_year from AFF_EVENT_V
Order by academic_year;
其结果如下:

2002-2003
2003-2004
2004-2005
2005-2006
2006-2007
2007-2008
2008-2009
2009-2010
2010-2011
2011-2012
2012-2013
2013-2014
2014-2015
2015-2016
2016-2017
2017-2018
我希望结果显示在多个(比如说5个)“列”中。 我在寻找这样的结果:

2002-2003     2003-2004     2004-2005     2005-2006     2006-2007
2007-2008     2008-2009     2009-2010     2010-2011     2011-2012
etc.

如何构造查询以产生此输出?

一种方法是条件聚合:

select max(case when mod(seqnum, 5) = 0 then academic_year end),
       max(case when mod(seqnum, 5) = 1 then academic_year end),
       max(case when mod(seqnum, 5) = 2 then academic_year end),
       max(case when mod(seqnum, 5) = 3 then academic_year end),
       max(case when mod(seqnum, 5) = 4 then academic_year end)
from (select academic_year, row_number() over (order by academic_year) - 1 as seqnum
      from AFF_EVENT_V
      group by academic_year
     ) a
group by floor(seqnum / 5);

一种方法是条件聚合:

select max(case when mod(seqnum, 5) = 0 then academic_year end),
       max(case when mod(seqnum, 5) = 1 then academic_year end),
       max(case when mod(seqnum, 5) = 2 then academic_year end),
       max(case when mod(seqnum, 5) = 3 then academic_year end),
       max(case when mod(seqnum, 5) = 4 then academic_year end)
from (select academic_year, row_number() over (order by academic_year) - 1 as seqnum
      from AFF_EVENT_V
      group by academic_year
     ) a
group by floor(seqnum / 5);

谢谢你,戈登。这正是我在sqldeveloper中寻找的答案。你对Oracle Apex了解多少吗?当我将您的建议作为报告的SQL时,我在Apex 5中得到一个错误:列名“MAX(CASEWHENMOD(SEQNUM,5)=0 ThenAcademic_YEAREND)”对于SQL查询无效。确保为列使用唯一的别名。只需为每个“MAX”值创建别名,例如“dummy”value_1、value_2、…、value_5Yup。我一按下按钮就意识到了这一点。:-)我只是在每行的最后一个括号后面加上了“C1”和“C2”。再次感谢。我很感激!谢谢你,戈登。这正是我在sqldeveloper中寻找的答案。你对Oracle Apex了解多少吗?当我将您的建议作为报告的SQL时,我在Apex 5中得到一个错误:列名“MAX(CASEWHENMOD(SEQNUM,5)=0 ThenAcademic_YEAREND)”对于SQL查询无效。确保为列使用唯一的别名。只需为每个“MAX”值创建别名,例如“dummy”value_1、value_2、…、value_5Yup。我一按下按钮就意识到了这一点。:-)我只是在每行的最后一个括号后面加上了“C1”和“C2”。再次感谢。我很感激!