Mysql
 sql >> Base de données >  >> RDS >> Mysql

Créer dynamiquement des colonnes à partir de données de ligne à l'aide de Select dans BigQuery

Ci-dessous, c'est pour BigQuery !

Remarque :vos attentes concernant les noms de colonne de sortie ne sont pas correctes !
Le nom de la colonne ne peut pas commencer par un chiffre - donc dans l'exemple ci-dessous - j'utiliserai id_1, id_2 et id_3 au lieu de 1, 2 et 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'exemple ci-dessus suppose que vous connaissez à l'avance vos identifiants et qu'il y en a très peu, ce n'est donc pas grave d'écrire manuellement quelques nombres de lignes avec SUM(...) pour chaque identifiant

Si ce n'est pas le cas, vous pouvez d'abord générer la requête ci-dessus par programme en exécutant la requête ci-dessous

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
)

en conséquence - vous obtiendrez une chaîne comme ci-dessous

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

Donc, maintenant, copiez-le et collez-le dans l'éditeur de requête et exécutez-le

vous pouvez voir un exemple similaire ici - https://stackoverflow.com/a/36623258/5221944