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

Vytvořte souhrnný výsledek s jedním dotazem

Toto je standardní pivotní dotaz:

  SELECT uc.uut_sn,
         MAX(CASE 
               WHEN uc.characteristic_name = 'char_name_1' THEN uc.characteristic_value 
               ELSE NULL 
             END) AS char_name_1,
         MAX(CASE 
               WHEN uc.characteristic_name = 'char_name_2' THEN uc.characteristic_value 
               ELSE NULL 
             END) AS char_name_2,
         MAX(CASE 
               WHEN uc.characteristic_name = 'char_name_3' THEN uc.characteristic_value 
               ELSE NULL 
             END) AS char_name_3,
    FROM unit_characteristics uc
GROUP BY uc.uut_sn

Aby to bylo dynamické, musíte použít Dynamická syntaxe SQL MySQL s názvem Připravené příkazy . Vyžaduje dva dotazy – první získá seznam characteristic_name hodnoty, takže můžete zřetězit příslušný řetězec do výrazů CASE, jak vidíte v mém příkladu jako konečný dotaz.



  1. MYSQL - Vyberte pouze v případě, že řádek v LEFT JOIN není přítomen

  2. PostgreSQL - klauzule GROUP BY nebo použít v agregační funkci

  3. Převod datového typu varchar na datový typ datetime vedl k chybě hodnoty mimo rozsah

  4. LISTAGG v Oracle pro vrácení odlišných hodnot