sql >> Databáze >  >> RDS >> Mysql

Dynamické vytváření sloupců z dat řádků pomocí Select in BigQuery

Níže je pro BigQuery!

Vezměte prosím na vědomí:Vaše očekávání ohledně názvů výstupních sloupců nejsou správná!
Název sloupce nemůže začínat číslicí – takže v níže uvedeném příkladu – budu místo 1, 2 a 3 používat id_1, id_2 a id_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

Výše uvedený příklad předpokládá, že předem znáte svá ID a je jich velmi málo, takže není velký problém napsat ručně několik řádků pomocí SUM(...) pro každé ID

Pokud tomu tak není, můžete nejprve vygenerovat výše uvedený dotaz programově spuštěním pod dotazem

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
)

jako výsledek - dostanete řetězec jako níže

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

Nyní jej zkopírujte a vložte do Editoru dotazů a spusťte

podobný příklad můžete vidět zde - https://stackoverflow.com/a/36623258/5221944




  1. Zjistěte, zda je tabulka rozdělena na SQL Server (T-SQL)

  2. Dotaz na kontingenční tabulku MySQL s dynamickými sloupci

  3. Jak používat uživatelské proměnné MySQL s ADO.NET

  4. Hromadná/dávková aktualizace/upsert v PostgreSQL