Мой вопрос похож на этот How to simulate a pivot table with BigQuery?. Но представьте, что у вас есть непредсказуемое количество строк, поэтому вы не можете перечислить их в инструкции IF. Итак, есть ли способ принять значения DISTINCT из одного столбца и создать список столбцов из него?Генерировать столбцы из строк автоматически (без IF)
ответ
Очень простой пример ниже, чтобы показать подход:
Предположим, у вас есть temp.example таблицу:
select * from
(select '2015-08-01' as day, 1 as category, 11 as volume),
(select '2015-08-01' as day, 2 as category, 21 as volume),
(select '2015-08-01' as day, 3 as category, 31 as volume),
(select '2015-08-02' as day, 1 as category, 101 as volume),
(select '2015-08-02' as day, 2 as category, 201 as volume),
(select '2015-08-03' as day, 1 as category, 301 as volume),
(select '2015-08-03' as day, 2 as category, 302 as volume),
(select '2015-08-03' as day, 4 as category, 304 as volume)
и, предположим, что вы хотите построить запрос, как показано ниже, но без зная заранее, как много различных категорий у вас есть
select
day,
sum(if(category = 1, volume, 0)) as category_1,
sum(if(category = 2, volume, 0)) as category_2,
sum(if(category = 3, volume, 0)) as category_3,
sum(if(category = 4, volume, 0)) as category_4
from temp.example
group by day
order by day
Ниже описана гБк код, который делает именно это
select 'select day, ' +
group_concat_unquoted('sum(if(category = ' + string(category) + ', volume, 0)) as category_' + string(category))
+ ' from temp.example group by day order by day'
from (select category from temp.example group by category order by category)
Выход этого запроса является запрос, который будет производить стержень для вас, если вы запустите его
day category_1 category_2 category_3 category_4 2015-08-01 11 21 31 0 2015-08-02 101 201 0 0 2015-08-03 301 302 0 304
Да, действительно, это возможно, но вам нужно использовать свой собственный язык программирования, поскольку вы не можете генерировать синтаксис SQL с использованием языка SQL-запросов.
Попытка думать, если есть какие-то способы, чтобы сделать это с помощью нового пользователя отличать Задаваемые функции: HTTPS://cloud.google.com/bigquery/user-defined-functions –
- 1. Генерировать автоматически DataTable из XML
- 2. Как автоматически генерировать регулярное выражение из заданного списка строк?
- 3. Как получить определенные столбцы, а не автоматически генерировать все столбцы или атрибуты из Entity
- 4. Генерировать имена файлов автоматически без столкновений
- 5. Привязать массив структур к DataGrid и автоматически генерировать столбцы
- 6. Автоматически удалять столбцы из CSV?
- 7. EasyUI Datagrid, как я могу автоматически генерировать столбцы?
- 8. Как генерировать столбцы динамически?
- 9. Генерировать div автоматически mysql_fetch_array
- 10. Автоматически генерировать новую миграцию
- 11. Vim автоматически генерировать Ctags
- 12. Автоматически генерировать html-код
- 13. Поворот строк в столбцы без агрегата
- 14. дата преобразования строк в столбцы без поворота
- 15. OracleDataAdapter.Fill - извлекает столбцы, но без строк
- 16. Автоматически генерировать C++-файл из заголовка?
- 17. Автоматически генерировать блок-диаграммы из кода C++
- 18. Генерировать диапазон строк
- 19. Автоматически генерировать ввод
- 20. Автоматически генерировать класс C#
- 21. генерировать скрипты автоматически
- 22. Генерировать автоматически имя листов
- 23. SQL Транспонирование строк в столбцы без агрегата
- 24. Автоматически создавать столбцы GridView WPF
- 25. Транспонирование из строк в столбцы
- 26. Столбцы PostgreSQL для строк без объяснений, указывающих имена столбцов/столбцы
- 27. Динамически генерировать столбцы в RDLC
- 28. SQL преобразования строк в столбцы без точки
- 29. Shifting строк в столбцы, без провалов
- 30. Группировка, преобразование строк в столбцы без агрегата
Это действительно высокий уровень SQL! Спасибо! Конечно, это не динамично, но я думаю, что это лучшее решение на данный момент. –