Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Dynamisches Erstellen von Spalten aus Zeilendaten mit Select in Bigquery

Unten ist für BigQuery!

Bitte beachten Sie:Ihre Erwartungen bezüglich der Ausgabespaltennamen sind nicht korrekt!
Der Spaltenname darf nicht mit einer Ziffer beginnen - daher werde ich im folgenden Beispiel id_1, id_2 und id_3 anstelle von 1, 2 und 3 verwenden

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

Das obige Beispiel geht davon aus, dass Sie Ihre IDs im Voraus kennen und es nur sehr wenige davon gibt, daher ist es keine große Sache, manuell ein paar Zeilen mit SUM(...) für jede ID

zu schreiben

Wenn dies nicht der Fall ist, können Sie zuerst die obige Abfrage programmgesteuert generieren, indem Sie die folgende Abfrage

ausführen
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
)

Als Ergebnis erhalten Sie eine Zeichenfolge wie unten

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

Kopieren Sie es jetzt einfach, fügen Sie es in den Abfrage-Editor ein und führen Sie es aus

Sie können ein ähnliches Beispiel hier sehen - https://stackoverflow.com/a/36623258/5221944