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