sql >> Databasteknik >  >> RDS >> Mysql

Skapa dynamiskt kolumner från raddata med Välj i Bigquery

Nedan är för BigQuery!

Observera:dina förväntningar på utdatakolumnnamn är inte korrekta!
Kolumnnamn kan inte börja med siffra - så i exemplet nedan - kommer jag att använda id_1, id_2 och id_3 istället för 1, 2 och 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

Ovanstående exempel förutsätter att du i förväg känner till dina ID och att det finns väldigt få av dem så det är ingen stor sak att manuellt skriva några antal rader med SUM(...) för varje ID

Om detta inte är ett fall - du kan först generera ovanstående fråga programmatiskt genom att köra nedanstående fråga

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
)

som ett resultat - du kommer att få en sträng som nedan

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

Så nu är det bara att kopiera det och klistra in i Query Editor och köra det

du kan se liknande exempel här - https://stackoverflow.com/a/36623258/5221944




  1. Hur man hittar poster med NULL i en kolumn

  2. Hur kan jag ställa in det maximala antalet MySQL-processer eller trådar?

  3. hur rengör man Laravel Bootstrap cache-konfigurationsfil?

  4. MySQL CASE för att uppdatera flera kolumner