2017-02-25 56 views
-1

支點我有這樣的選擇MySQL的:從一個表

SELECT concat(date_format(startLesson, '%H:%i'), ' - ', date_format(endLesson, '%H:%i')) AS 'CALENDAR', case when classroom = 'third_a' THEN (select concat(surname, '\r\n', about, '\r\n', tcode, '\r\n', book)) END AS 'THIRD_A', case when classroom = 'THIRD_B' THEN (select concat(surname, '\r\n', about, '\r\n', tcode, '\r\n', book)) END AS 'THIRD_B' FROM test_calendar WHERE date(startLesson) = '2017-02-24'

產生這樣的輸出:

CALENDAR---------------->THIRD_A--------------->THIRD_B 
08:00 - 09:00---------->PIPPO(bla)------------>NULL 
09:00 - 10:00---------->PLUTO(bla)------------>NULL 
09:00 - 10:00---------->NULL------------------->PAPERINO 

我需要顯示的數據爲:

CALENDAR---------------->THIRD_A--------------->THIRD_B 
08:00 - 09:00---------->PIPPO(bla)------------>NULL 
09:00 - 10:00---------->PLUTO(bla)------------>PAPERINO 

表結構是:

id (int, pk) 
classRoom_id (int) 
lesson_id (int) 
startLesson datetime 
endLesson datetime 
about varchar 
tcode varchar 
book varchar 
surname 

任何提示?

預先感謝您!

回答

3

你似乎需要一個group by

SELECT concat(date_format(startLesson, '%H:%i'), ' - ', 
       date_format(endLesson, '%H:%i')) AS CALENDAR, 
     group_concat(case when classroom = 'third_a' 
         then concat(surname, '\r\n', about, '\r\n', tcode, '\r\n', book)) 
        end) as THIRD_A, 
     group_concat(case when classroom = 'THIRD_B' 
         then concat(surname, '\r\n', about, '\r\n', tcode, '\r\n', book)) 
        end) as THIRD_B 
FROM test_calendar 
WHERE date(startLesson) = '2017-02-24' 
GROUP BY Calendar; 

注:

  • 如果你想每個組一行,然後使用group by
  • 不需要沒有from子句的子查詢。
  • 如果有多個匹配,則使用group_concat()。對於您的問題中的數據,max()可能沒問題。
  • 通常不鼓勵在行中嵌入新行字符。
+0

工作正常,謝謝。關於將新行嵌入列中,爲什麼不鼓勵?再次感謝。 – user1291822

+1

@ user1291822。 。 。 SQL結果集由列中的行組成。有一行跨越多行可能會造成混淆。當然,你可能有充足的理由包含換行符。我只是說通常「排」和「線」通常是同義詞。 –