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

Dynamisk oprettelse af kolonner fra rækkedata ved hjælp af Vælg i Bigquery

Nedenfor er til BigQuery!

Bemærk venligst:dine forventninger til outputkolonnenavne er ikke korrekte!
Kolonnenavn kan ikke starte med ciffer - så i nedenstående eksempel - vil jeg bruge id_1, id_2 og id_3 i stedet for 1, 2 og 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

Ovenstående eksempel antager, at du på forhånd kender dine id'er, og der er meget få af dem, så det er ikke en stor sag at skrive manuelt få antal linjer med SUM(...) for hvert id

Hvis dette ikke er tilfældet - kan du først generere ovenstående forespørgsel programmatisk ved at køre nedenstående forespørgsel

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 et resultat - du vil få en streng som nedenfor

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 skal du bare kopiere det og indsætte det i Query Editor og køre det

du kan se lignende eksempel her - https://stackoverflow.com/a/36623258/5221944




  1. Oracle pivot operatør

  2. Løsning for dynamiske sætninger i lagrede procedurer kaldet fra triggere

  3. Sådan får du identitetskolonneværdier uden at nævne Identitetskolonnenavn i Select - SQL Server / T-SQL vejledning del 46

  4. Ren måde at bruge postgresql vinduesfunktioner i django ORM?