Mysql
 sql >> Database >  >> RDS >> Mysql

Creazione dinamica di colonne dai dati di riga utilizzando Seleziona in Bigquery

Di seguito è per BigQuery!

Nota:le tue aspettative sui nomi delle colonne di output non sono corrette!
Il nome della colonna non può iniziare con una cifra, quindi nell'esempio seguente userò id_1, id_2 e id_3 invece di 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

L'esempio sopra presuppone che tu conosca in anticipo i tuoi ID e ce ne siano pochissimi, quindi non è un grosso problema scrivere manualmente pochi numeri di righe con SUM(...) per ogni ID

In caso contrario, puoi prima generare la query sopra a livello di codice eseguendo la query sotto

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
)

di conseguenza, otterrai una stringa come quella di seguito

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

Quindi, ora copialo e incollalo nell'editor di query ed eseguilo

puoi vedere un esempio simile qui - https://stackoverflow.com/a/36623258/5221944