2014-12-19 95 views
2

我需要根據應用某個課程代碼的課程的學生人數將我的MySQL錶行分成多行。根據表中的值將MySQL行拆分爲多行

enter image description here

基本上,我需要將設計不良的MySQL表分成行,以便每個學生在與相關course_code和唯一ID生成其指定的行結束(id_new)。請注意,course1_students和course2_students中的學生總數顯然將等於所需表中的行數。

感謝任何幫助!

+0

可能可以與幾個工會做到這一點。這可能比這個更好。 – Danny

+0

謝謝。我試過UNION,最後得到了12行代碼。我稍後會發布結果,但是我希望能有更快更清潔的方法。 – user1450458

+0

讓我們看看聯盟 – Strawberry

回答

0

要將每行分成兩行,通過將設計不佳的表與兩行常量表交叉連接,獲取FROM中每行的兩個副本。要爲FROM表中的每一行獲取courseX_student行,請在course_students上與table of integers >= 0交叉連接。使用auto_incremented id_new將以下行插入到表中。 (我假設0 courseX_students值產生任何輸出行。因爲你沒有給表的確切含義。)

select id,name,1 as course_students, 
    case which 
    when 1 then course1_code 
    when 2 then course2_code 
    end as course_code 
from numbers 
cross join (select 1 as which union select 2) w 
cross join poorly 
where n < 
    case which 
    when 1 then course1_students 
    when 2 then course2_students 
    end 
0
CREATE TABLE my_new_table AS 
SELECT id 
    , name 
    , course1_students course_students 
    , course1_code course_code 
    FROM my_table 
UNION 
SELECT id 
    , name 
    , course2_students 
    , course2_code 
    FROM my_table; 

ALTER TABLE my_new_table ADD PRIMARY KEY(id,course_code); 

id_new是多餘的(和名稱可能屬於一個單獨的表)