两张表。
a表是人员成绩表,3个字段 姓名,科目,成绩
如:a表 姓名,科目,成绩
 甲    语文  75
  乙    数学  80
  乙    英语  90
  甲    数学  85
   丙   化学   80b表是科目表    2个字段   id      科目
如  id      科目
    1       语文
    2       数学
    3       英语
    4       化学
     5      物理如下显示     语文   数学   英语     化学     物理
甲   75      85        0            0           0
乙   0        80        90          0           0
丙   0        0           0           80         0
行和列都是动态生成。这个sql如何写?
谢谢!

解决方案 »

  1.   

    一周总有不少人会问行列转换的问题
    固定行列的用DECODE或者CASE WHEN实现
    不固定列办法是有,比较麻烦
    一般建议前台用报表程序的交叉表实现
      

  2.   


    student subject grade 
    --------- ---------- -------- 
    student1 语文 80 
    student1 数学 70 
    student1 英语 60 
    student2 语文 90 
    student2 数学 80 
    student2 英语 100 
    …… 
    转换为 
    语文 数学 英语 
    student1 80 70 60 
    student2 90 80 100 
    …… 
    语句如下:select student, 
    sum(decode(subject,'语文', grade,null)) "语文", 
    sum(decode(subject,'数学', grade,null)) "数学", 
    sum(decode(subject,'英语', grade,null)) "英语" 
    from table 
    group by student; 
      

  3.   

    行列转换在ITPUB有一个贴子写的比较好
    http://www.itpub.net/viewthread.php?tid=1017026&extra=page%3D1%26amp;filter%3Ddigest
    可以参考一下
      

  4.   

    decode
    group by 
    用上这两个应该就可以实现了。。
    就是很普通的行列转换问题
      

  5.   

    student subject grade 
    --------- ---------- -------- 
    student1 语文 80 
    student1 数学 70 
    student1 英语 60 
    student2 语文 90 
    student2 数学 80 
    student2 英语 100 
    …… 
    转换为 
    语文 数学 英语 
    student1 80 70 60 
    student2 90 80 100 
    …… 
    语句如下:select student, 
    sum(decode(subject,'语文', grade,null)) "语文", 
    sum(decode(subject,'数学', grade,null)) "数学", 
    sum(decode(subject,'英语', grade,null)) "英语" 
    from table 
    group by student; 
    如果语文,数学等从科目表里取。如何去取?