प्रारंभ में, मैं यही लेकर आया था:
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
परिणाम:
DATE DAY MORNING EVENING
22/09/2014 Monday Ahmad Abdul Faris Faris
23/09/2014 Tuesday Iqbal
जैसा कि आप देख सकते हैं इवनिंग फील्ड दो बार फ़ारिस शामिल है . इसलिए मैंने दो प्रश्नों का उपयोग किया और उन परिणामों में शामिल हो गया। इस तरह:
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
परिणाम:
DATE DAY MORNING EVENING
22/09/2014 Monday Ahmad Abdul Faris
23/09/2014 Tuesday Iqbal
परिणाम देखें SQL Fiddle ।
स्पष्टीकरण:
हम सुबह और शाम के लिए अलग-अलग चयन कर रहे हैं, फिर हम इन दो तालिकाओं को तारीख और दिन के साथ जोड़ रहे हैं। और अंत में परिणाम सम्मिलित क्वेरी से प्राप्त किया जाता है।
GROUP_CONCAT
समान दिनांक और दिन वाले फ़ील्ड को समूहीकृत करने के लिए उपयोग किया जाता है। हम SEPARATOR ' '
. का उपयोग कर सकते हैं अंतरिक्ष के लिए विभाजक के रूप में। अगर आप SEPARATOR ' '
. को हटाते हैं , आपको कॉमा (,) से अलग परिणाम मिलेगा।
COALESCE
रिक्त स्ट्रिंग के साथ शून्य मानों को बदलने के लिए प्रयोग किया जाता है (''
)।