查询 select * from tcourse where 姓名=A
 姓名 课程       老师       得分
 A 数学        数1 80
 A 语文        语1 75
 A 外语        外1 90期望输出:
                     数学成绩                       语文成绩                            外语成绩
 姓名 课程    老师    得分        课程 老师 得分        课程  老师 得分
 A 数学    数1 80       语文 语1 75        外语   外1 90将上面一个人的三条成绩(三行四列),转为一行数据(一行10列),可以用sql,或者存储过程,求大神解答。

解决方案 »

  1.   

    如果课程始终是这3门,那就用以下试试,否则就得用动态的方法了。
     SELECT 姓名,
            MAX(CASE WHEN 课程='数学' THEN 课程 ELSE '' END) AS 课程_数学,
    MAX(CASE WHEN 课程='数学' THEN 老师 ELSE '' END) AS 老师_数学,
    MAX(CASE WHEN 课程='数学' THEN 得分 ELSE '' END) AS 得分_数学,
    MAX(CASE WHEN 课程='语文' THEN 课程 ELSE '' END) AS 课程_语文,
    MAX(CASE WHEN 课程='语文' THEN 老师 ELSE '' END) AS 老师_语文,
    MAX(CASE WHEN 课程='语文' THEN 得分 ELSE '' END) AS 得分_语文,
    MAX(CASE WHEN 课程='外语' THEN 课程 ELSE '' END) AS 课程_外语,
    MAX(CASE WHEN 课程='外语' THEN 老师 ELSE '' END) AS 老师_外语,
    MAX(CASE WHEN 课程='外语' THEN 得分 ELSE '' END) AS 得分_外语
    FROM tcourse
    GROUP BY 姓名
      

  2.   

    嗯 group by + 聚合函数可以实现
      

  3.   

    sql="select * from tcourse where 姓名='A'"
    cur.execute(sql)
    result=cur.fetchall()listaa=[]
    for i,a,b in zip(result[0],result[1],result[2]):
        listaa.append(i)
        listaa.append(a)
        listaa.append(b)
    listaa.remove('A')
    listaa.remove('A')
    print(listaa)
    得到的元素为10的一个list 再插入进mysql就行