sql >> Base de Datos >  >> RDS >> Mysql

Creación dinámica de columnas a partir de datos de fila mediante Seleccionar en Bigquery

¡Abajo está para BigQuery!

Tenga en cuenta:¡sus expectativas sobre los nombres de las columnas de salida no son correctas!
El nombre de la columna no puede comenzar con un dígito; por lo tanto, en el siguiente ejemplo, usaré id_1, id_2 e id_3 en lugar de 1, 2 y 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

El ejemplo anterior supone que conoce de antemano sus ID y hay muy pocos de ellos, por lo que no es gran cosa escribir manualmente unas cuantas líneas con SUM(...) para cada ID

Si este no es el caso, primero puede generar la consulta anterior mediante programación ejecutando la consulta debajo

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, obtendrá una cadena como la siguiente

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

Entonces, ahora simplemente cópielo y péguelo en el Editor de consultas y ejecútelo

puede ver un ejemplo similar aquí - https://stackoverflow.com/a/36623258/5221944