Короче говоря, у меня есть вложенные поля, которые я хотел бы разделить на разные столбцы.
Вот моя таблица сейчас:
И вот результат, который я хотел бы получить
У кого-нибудь есть решение для этого? заранее спасибо
Вы можете использовать запрос PIVOT:
SELECT * FROM sample_table
PIVOT (
ANY_VALUE(transaction_name) transaction_name,
ANY_VALUE(transaction_amount) transaction_amount
FOR transaction_name IN ('item_1' `1`, 'item_2' `2`, 'item_3' `3`)
);
Результаты запроса
Использование динамического SQL:
EXECUTE IMMEDIATE(FORMAT("""
SELECT * FROM sample_table
PIVOT (
ANY_VALUE(transaction_name) transaction_name,
ANY_VALUE(transaction_amount) transaction_amount
FOR transaction_name IN ('%s')
);""", (SELECT STRING_AGG(DISTINCT transaction_name, "','") FROM sample_table))
);
@IrenRamadhan, вы можете найти универсальное решение, используя динамический sql Михаила или меня ниже. stackoverflow.com/questions/72869053/… stackoverflow.com/questions/74327529/… Я обновил ответ, чтобы вы могли увидеть, как он выглядит. Но вы должны отметить, что существуют некоторые ограничения на количество элементов, которые вы можете поворачивать.
Привет Jaytiger, спасибо за решение. На самом деле это сработало для случая выше, благодаря вам. Однако в моем реальном случае у меня есть тысячи или даже миллионы элементов, невозможно поместить их в предложение FOR ... IN (). Есть ли способ автоматизировать это? Дайте мне знать, если мне нужно задать еще один вопрос.