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
Спасибо!