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

时间:2017-04-27 16:34:49

标签: 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
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

我想将行扩展为列,为每行添加两列(QTY和START_DATE),以便每个日期+ 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个(MAX(ROW)),但将来可能会有更多。我可以手动添加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,

...

max(CASE WHEN ROW = n THEN q.START_DATE END) AS SDn,
SUM(CASE WHEN ROW = n THEN q.QTY END) AS QTYn

我的第一个问题,如果我将数字修改为50,那么在我的代码中添加这100个列是否有一个干净的方法,或者我只需要明确显示所有100行?

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

谢谢!

0 个答案:

没有答案