Ниже для BigQuery Standard SQL - чтобы помочь вам начать
#standardSQL
SELECT item,
CONCAT('v2', IFNULL(STRING_AGG(item, '') OVER(ORDER BY item ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), '')) var1,
CONCAT('v2', STRING_AGG(item, '') OVER(ORDER BY item ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) var2
FROM `project.dataset.table`
Если применить к образцу данных из вашего вопроса - как в примере ниже -
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'A' item UNION ALL
SELECT 'B' AS item UNION ALL
SELECT 'C' AS item UNION ALL
SELECT 'D' AS item UNION ALL
SELECT 'E' AS item
)
SELECT item,
CONCAT('v2', IFNULL(STRING_AGG(item, '') OVER(ORDER BY item ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), '')) var1,
CONCAT('v2', STRING_AGG(item, '') OVER(ORDER BY item ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) var2
FROM `project.dataset.table`
-- ORDER BY item
результат равен
Row item var1 var2
1 A v2 v2A
2 B v2A v2AB
3 C v2AB v2ABC
4 D v2ABC v2ABCD
5 E v2ABCD v2ABCDE
С вашими реальными данными у вас, скорее всего, есть какой-то столбец, который вы можете использовать для желаемого упорядочения ваших элементов в выходных переменных - для примера, я просто использовал упорядочение по самим элементам
В качестве варианта вышеприведенного скрипта - вы можете использовать версию ниже
#standardSQL
SELECT item, var1, CONCAT(var1, item) var2 FROM (
SELECT item, CONCAT('v2', IFNULL(var, '')) var1 FROM (
SELECT item,
STRING_AGG(item, '') OVER(ORDER BY item ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) var
FROM `project.dataset.table`
)
)