Oracle - динамически выбирать количество столбцов для добавления в оператор SELECT

Это вопрос из двух частей. У меня есть базовая таблица, которая выглядит так:

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 ответов

Другие вопросы по тегам