Ниже для BigQuery Standard SQL
#standardSQL
SELECT id, DATE_ADD(date, INTERVAL delta MONTH) date, quantity, price / quantity price
FROM `project.dataset.table`,
UNNEST(GENERATE_ARRAY(0, quantity - 1)) delta
ORDER BY id, date
Вы можете протестировать, поиграть с выше, используя пример данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'A123' id, DATE '2010-10-30' date, 3 quantity, 600000 price UNION ALL
SELECT 'B567', '2010-10-30', 6, 900000
)
SELECT id, DATE_ADD(date, INTERVAL delta MONTH) date, quantity, price / quantity price
FROM `project.dataset.table`,
UNNEST(GENERATE_ARRAY(0, quantity - 1)) delta
ORDER BY id, date
с результатом
Row id date quantity price
1 A123 2010-10-30 3 200000.0
2 A123 2010-11-30 3 200000.0
3 A123 2010-12-30 3 200000.0
4 B567 2010-10-30 6 150000.0
5 B567 2010-11-30 6 150000.0
6 B567 2010-12-30 6 150000.0
7 B567 2011-01-30 6 150000.0
8 B567 2011-02-28 6 150000.0
9 B567 2011-03-30 6 150000.0