2015-07-10 57 views
0

我正在寫一個SQL代碼,並希望在行中的變量滿足特定條件時將多行合併爲一行。我還想在滿足條件時創建一個新行。SQL:如何在符合特定條件時將多行合併爲一行,並在滿足特定條件時創建新行?

我的表稱爲CLASSES

基本上這裏就是我想要做的:

IF CLASS# = CLASS_ROOM THEN MERGE THOSE ROWS 
START A NEW ROW WHEN CLASS_TIME >='12:30' 

我想去從本:

CLASS_NAME  CLASS #  CLASS_TIME  CLASS_ROOM 
    PHY   1280   7:00   1280 
    SCI   1280   9:00   1280 
    COM   1280   12:00   1280 
    DRO   1738   01:00   1738 
    PIL   1738   03:00   1738 

這樣:

PHY 1280 7:00 1280 SCI 1280 9:00 1280 COM 1280 12:00 1280 

DRO 1738 1:00 1738 PIL 1738 3:00 1738 
+0

MySQL *或* SQL Server? MSSQL!= MYSQL,並且沒有通用的方法來非規範化請求的輸出。這可能會更好地處理客戶端應用程序中的非規範化。模式也看起來......可疑(例如,不同的類如何能有相同的類號?),但這是一個不同的問題。 – user2864740

+0

SQL Server,我只是用它作爲例子。我的實際表格和數據更有意義。 – Ben

+0

我不相信您的樣本包含NEW ROW案例?如果您添加如下內容:「NEW 1280 12:30 1280」? –

回答

0

這一個不是h在MySQL中,因爲該表服務器擁有GROUP_CONCAT()。 (http://sqlfiddle.com/#!9/b507fe/12/0

SELECT GROUP_CONCAT(
      CONCAT(CLASS_NAME, ' ', 
       CLASS, ' ', 
       DATE_FORMAT(CLASS_TIME,'%H:%i'), ' ', 
       CLASS_ROOM) 
      ORDER BY CLASS_TIME 
      SEPARATOR ' ' 
     ) class_list 
    FROM CLASS 
    GROUP BY HOUR(CLASS_TIME) DIV 12, CLASS_ROOM 
    ORDER BY CLASS_ROOM, HOUR(CLASS_TIME) DIV 12 

在Microsoft SQL Server它需要各種神祕的猴子業務,對此,您可以閱讀。 Simulating group_concat MySQL function in Microsoft SQL Server 2005?

相關問題