phpMyAdmin
 sql >> Base de Dados >  >> Database Tools >> phpMyAdmin

Instrução SQL para exibir no grupo de determinada coluna


Inicialmente, isso é o que eu inventei:
SELECT s.date, s.day, COALESCE(GROUP_CONCAT(bm.worker SEPARATOR ' '),'') as Morning,COALESCE(GROUP_CONCAT(be.worker SEPARATOR ' '),'') as Evening
FROM schedule s LEFT JOIN 
block bm ON s.id = bm.schedule_id AND bm.shift=1 LEFT JOIN 
block be ON s.id = be.schedule_id AND be.shift=2
GROUP BY s.date,s.day

Resultado:
DATE        DAY       MORNING       EVENING
22/09/2014  Monday    Ahmad Abdul   Faris Faris
23/09/2014  Tuesday                 Iqbal

Resultado em Fiddle .

Como você pode ver, o campo noturno contém Faris duas vezes . Então eu usei duas consultas e juntei esses resultados. Assim:
SELECT T1.date,T1.day,COALESCE(T1.Morning,'') as Morning,COALESCE(T2.Evening,'') as Evening FROM
    (SELECT s.date, s.day, GROUP_CONCAT(bm.worker SEPARATOR ' ') as Morning
     FROM schedule s LEFT JOIN 
     block bm ON s.id = bm.schedule_id AND bm.shift=1
     GROUP BY s.date,s.day) T1
  JOIN
    (SELECT s.date, s.day,GROUP_CONCAT(be.worker SEPARATOR ' ') as Evening
     FROM schedule s LEFT JOIN 
     block be ON s.id = be.schedule_id AND be.shift=2
     GROUP BY s.date,s.day) T2 
  ON T1.Date=T2.Date AND T1.Day=T2.Day

Resultado:
DATE        DAY      MORNING        EVENING
22/09/2014  Monday   Ahmad Abdul    Faris
23/09/2014  Tuesday                 Iqbal

Veja o resultado em SQL Fiddle .

Explicação:

Estamos selecionando para Manhã e Noite separadamente, depois estamos juntando essas duas tabelas com data e dia. E, finalmente, o resultado é obtido da consulta unida.

GROUP_CONCAT é usado para agrupar campos com a mesma data e dia. Podemos usar SEPARATOR ' ' para o espaço como separador. Se você remover SEPARATOR ' ' , você obterá o resultado separado por vírgula(,).

COALESCE éusado para substituir valores nulos por uma string vazia('' ).