sql >> Database >  >> RDS >> Mysql

Dynamisch draaipunt MySQL

SELECT id,SUM(CASE WHEN Item='Chocolate' THEN Purchased END) as Chocolate_Purchased,
SUM(CASE WHEN Item='Biscuit' THEN Purchased END) as Biscuit_Purchased,
SUM(CASE WHEN Item='Jelly' THEN Purchased END) Jelly_Purchased,
SUM(CASE WHEN Item='Mile' THEN Purchased END) as Mile_Purchased 
GROUP BY id

Hier is de dynamische versie

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(IF(t.item = ''',
      item,
      ''', t.purchased, 0)) AS ',
      item
    )
   )INTO @sql
FROM t;

SET @sql = CONCAT('SELECT id,
                     ', @sql, ' 
                   FROM t               
                   GROUP BY id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

FIDDLE




  1. Waarom query niet wordt opgeslagen in csv-bestand terwijl het normaal lijkt in de postgresql-console?

  2. MySQL Selecteer de eerste dag van het jaar en de maand

  3. MySQL Achterliggende regeleinden uit een kolom verwijderen

  4. Vergelijkingsprobleem met Oracle PL/SQL-tekenreeksen