Ciò di cui hai bisogno è una query Pivot. Poiché MySQL non ha un'istruzione per questo, dovrai scriverla "a mano" (più esattamente, creare un'espressione SQL dinamica):
Quindi, potrebbe essere qualcosa del genere:
-- First you need to build the column list.
-- The "CASE ... END" expression will filter the data for each column
-- I use "max()" as an example; use whatever aggregate function you need.
select
group_concat(distinct
concat(
'max(case when del_ProductID = ', del_productID, ' then del_id end) ',
'as `del_productID-', del_productID, '` '
)
)
into @sql
from example;
-- Now build the full SELECT statement
set @sql = concat('SELECT del_date, ', @sql, ' from example group by del_date');
-- OPTIONAL: Check the SELECT statement you've just built
select @sql;
-- Prepare a statement using the SELECT statement built above
prepare stmt from @sql;
execute stmt;
-- When you are done, be sure to dealocate the prepared statement
deallocate prepare stmt;
Per favore vedi questo esempio in SQL fiddle .
La spiegazione
Potresti dire "amico, sembra piuttosto complesso!"... ma non è affatto complesso (è solo laborioso). Quindi, come funziona la soluzione di cui sopra?
Il primo passo è costruire l'elenco delle colonne e un'espressione per riempirlo. Il group_concat() funzione prenderà i valori di riga (o espressioni) e li concatenerà, separandoli da virgole. È necessaria una funzione di aggregazione per mostrare i valori nel risultato della tabella pivot. Ho scelto max() come esempio, ma puoi usare sum() , average() o qualsiasi altra funzione aggregata.
Per quanto riguarda il case ... end
pezzo all'interno della funzione di aggregazione, è necessario che ogni colonna della tabella pivot corrisponda al valore di del_productID , quindi, ad esempio, case when del_ProductID = 1 then del_id end restituirà il valore di del_id solo se del_ProductID è 1 (restituirà null in ogni altro caso, puoi aggiungere else 0 se vuoi restituire zero, ad esempio).
Il select ... into
memorizzerà il risultato dell'espressione in una variabile chiamata @sql .
Dopo aver creato l'elenco delle colonne, devi scrivere il resto del select istruzione... questo è fatto con concat() funzione.
Per il resto, è abbastanza semplice:@sql è una stringa, quindi se vuoi eseguirla, devi creare un'istruzione preparata usando il suo valore (che è un select istruzione) ed eseguirlo.