2014-12-19 63 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是多余的(和名称可能属于一个单独的表)