Sql Oracle-在SELECT语句中动态选择要添加的列数

Sql Oracle-在SELECT语句中动态选择要添加的列数,sql,oracle,Sql,Oracle,这是一个由两部分组成的问题。我有一个基本表,如下所示: DATE ID START_DATE QTY ROW 2011-01-31 1 2009-04-30 40 1 2011-01-31 1 2009-10-31 5 2 2011-01-31 1 2010-01-15 10 3 2011-01-31 2 2009-09-15 50 1

这是一个由两部分组成的问题。我有一个基本表,如下所示:

DATE          ID    START_DATE    QTY     ROW
2011-01-31    1     2009-04-30    40      1
2011-01-31    1     2009-10-31    5       2
2011-01-31    1     2010-01-15    10      3
2011-01-31    2     2009-09-15    50      1
2011-01-31    3     2010-05-25    20      1
2011-01-31    3     2010-06-01    10      2
2011-01-31    3     2010-09-01    200     3
我想将行展开为列,为每行添加两列(数量和开始日期),以便每个日期+ID只有一行:

DATE        ID    SD1         QTY1  SD2         QTY2  SD3         QTY3
2011-01-31  1     2009-04-30  40    2009-10-31  5     2010-01-15  10
2011-01-31  2     2009-09-15  50    NULL        NULL  NULL        NULL
2011-01-31  3     2010-05-25  20    2010-06-01  10    2010-09-01  200
现在我需要添加多达44个(最大(行)),但将来可能会有更多。我可以通过以下操作手动添加44:

  max(CASE WHEN ROW = 1 THEN q.START_DATE END) AS SD1,
  SUM(CASE WHEN ROW = 1 THEN q.QTY END) AS QTY1,
  max(CASE WHEN ROW = 2 THEN q.START_DATE END) AS SD2,
  SUM(CASE WHEN ROW = 2 THEN q.QTY END) AS QTY2,

我的第一个问题是,如果我将数字固定为50,是否有一种干净的方法可以在代码中添加这100列,还是只需要显式显示所有100行

第二个问题,我有没有办法用MAX(ROW)告诉语句要添加多少列?这意味着如果最大值(行)=10,则添加SD1-SD10和QTY1-QTY10。但如果下一次运行时最大值(行)=100,则添加SD1-SD100,QTY1-QTY100


谢谢

例如,在Excel中使用透视表并通过外部数据源连接到数据库是一种选择吗?不,有几个原因。基表有几百万行,因此它不适合Excel。此外,这需要我在虚拟机之间移动文件,并且这个过程需要自动化。是否可以使用更简单的方法?是否可以在Excel中使用透视表,并通过外部数据源连接到数据库?不,有两个原因。基表有几百万行,因此它不适合Excel。而且,这需要我在虚拟机之间移动文件,而且这个过程需要自动化。是否足够使用更简单的方法?
max(CASE WHEN ROW = n THEN q.START_DATE END) AS SDn,
SUM(CASE WHEN ROW = n THEN q.QTY END) AS QTYn