Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar colunas dinamicamente a partir de dados de linha usando Select no Bigquery


Abaixo está para o BigQuery!

Observe:suas expectativas sobre os nomes das colunas de saída não estão corretas!
O nome da coluna não pode começar com dígito - portanto, no exemplo abaixo - usarei id_1, id_2 e id_3 em vez de 1, 2 e 3
SELECT
  SUM(CASE WHEN id = 1 THEN 1 END) AS id_1,
  SUM(CASE WHEN id = 2 THEN 1 END) AS id_2,
  SUM(CASE WHEN id = 3 THEN 1 END) AS id_3
FROM YourTable

O exemplo acima pressupõe que você conheça antecipadamente seus IDs e há muito poucos deles, portanto, não é grande coisa escrever manualmente alguns números de linhas com SUM(...) para cada ID

Se este não for um caso - você pode primeiro gerar a consulta acima programaticamente executando a consulta abaixo
SELECT 'SELECT ' + 
   GROUP_CONCAT_UNQUOTED(
      'SUM(CASE WHEN id = ' + STRING(id) + ' THEN 1 END) AS id_' + STRING(id)
   ) 
   + ' FROM YourTable'
FROM (
  SELECT id FROM (
    SELECT * FROM YourTable GROUP BY id ORDER BY id
)

como resultado - você receberá uma string como abaixo
SELECT SUM(CASE WHEN id = 1 THEN 1 END) AS id_1,SUM(CASE WHEN id = 2 THEN 1 END) AS id_2,SUM(CASE WHEN id = 3 THEN 1 END) AS id_3 FROM YourTable

Então, agora basta copiá-lo e colá-lo no Editor de Consultas e executá-lo

você pode ver um exemplo semelhante aqui - https://stackoverflow.com/a/36623258/5221944