例如:a表数据:  
 考试科目 考试成绩 考生 考试标题  
  01        02      001 期中考试
b表
  类型id 状态id  名称
  1        01    语文
  1        02    数学
  2        01    优秀
  2        02    良好
  3        001   小明
  3        002   小红
c表
  类型id 名称  
     1   考试科目  
    2    考试成绩  
    3     考生
查询结果要求: 考试科目 考试成绩 考生 考试标题
                语文       良好  小明  期中考试

解决方案 »

  1.   


    建这么3张表吧:
    create table A(
             calss_id varchar2(10),--考试科目
             score  varchar2(10),--考试成绩
             stu_id varchar2(10),--考生
             title  varchar2(40) --考试标题
      );
    create table B(
             type varchar2(10),--类型id
             state  varchar2(10),--状态id
             state_name varchar2(10)--名称  
      );
    create table C(
             type varchar2(10),--类型id
             type_name varchar2(10)--名称  
      );
    注:实际查询的时候C表是多余的。sql语句为:select 
       t1.state_name class_name,t2.state_name score,t3.state_name student_name,t.title 
    from A t 
    left join B t1 on t1.type=1 and t.calss_id=t1.state
    left join B t2 on t2.type=2 and t.score=t2.state
    left join B t3 on t3.type=3 and t.stu_id=t3.state
    order by class_name,score,student_name
      

  2.   

    select 
    (select b.名称 (select b.状态id status_b,b.名称 name_b,c.名称 name_c  from  from  b,c 
    where b.类型id = c.类型id ) d where d.status_b=a.考试科目 and d.name_c='考试科目'),
    (select b.名称 (select b.状态id status_b,b.名称 name_b,c.名称 name_c  from  from  b,c 
    where b.类型id = c.类型id ) d where d.status_b=a.考试成绩 and d.name_c='考试成绩'),
    (select b.名称 (select b.状态id status_b,b.名称 name_b,c.名称 name_c  from  from  b,c 
    where b.类型id = c.类型id ) d where d.status_b=a.考生 and d.name_c='考生'),
    考试标题   
    from  a