sql >> Databasteknik >  >> Database Tools >> phpMyAdmin

SQL-sats som ska visas i grupp av en viss kolumn

Till en början kom jag på det här:

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

Resultat:

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

Resultat i Fiol .

Som du kan se Kvällsfältet innehåller Faris två gånger . Så jag använde två frågor och gick med i dessa resultat. Så här:

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

Resultat:

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

Se resultatet i SQL Fiddle .

Förklaring:

Vi väljer för morgon och kväll separat, sedan slår vi samman dessa två tabeller med datum och dag. Och slutligen hämtas resultatet från den förenade frågan.

GROUP_CONCAT används för att gruppera fält med samma datum och dag. Vi kan använda SEPARATOR ' ' för utrymme som separator. Om du tar bort SEPARATOR ' ' , får du resultatet separerat med kommatecken(,).

COALESCE används för att ersätta nollvärden med tom sträng('' ).



  1. SQL Server-felet "Det är inte tillåtet att spara ändringar" ► Förhindra att spara ändringar som kräver att tabellen återskapas

  2. Max exekveringstidsfel

  3. Operation inte tillåten när innodb_forced_recovery> 0 [SqlYog]

  4. phpMyAdmin - MySQL-tillägget saknas