有这样一张表
STU-SCORE
Name varchar
Subject  varchar(VALUES LIKE math, chinese, english)
Score  number统计学生的考试成绩。
不是每个学生都参加了所有科目的考试,现在要得到bob, alice, peter的math, chinese, english考试成绩。如果没成绩,自动给0分。能否用一条SQL语句得到结果。谢谢

解决方案 »

  1.   

    你应该有三个表吧   必须采用双层外连接 select c.name,d.project,nvl(c.score,0) from(
    select a.name,b.project,b.score from
    student a,stu_score b where a.name=b.name(+)) c,project d where
    c.project(+) = d.project大致是这样 自己修改下
      

  2.   

    如果只有STU-SCORE表的话,那就只能这样写,SELECT ns.NAME, ns.subject, NVL (ss.score, 0) score
      FROM (SELECT a.NAME, b.subject
              FROM (SELECT 'bob' NAME
                      FROM DUAL
                    UNION
                    SELECT 'alice' NAME
                      FROM DUAL
                    UNION
                    SELECT 'peter' NAME
                      FROM DUAL) a,
                   (SELECT 'math' subject
                      FROM DUAL
                    UNION
                    SELECT 'chinese' subject
                      FROM DUAL
                    UNION
                    SELECT 'english' subject
                      FROM DUAL) b) ns LEFT JOIN "STU-SCORE" ss ON (    ns.NAME =
                                                                           ss.NAME
                                                                    AND ns.subject =
                                                                           ss.subject
                                                                   )
    但是实际上,在数据库设计的时候应该有student,subject两个配置表,分别保存学生和科目信息那么就应该是这样的:SELECT ns.NAME, ns.subject, NVL (ss.score, 0) score
      FROM (SELECT a.NAME, b.subject
              FROM studnet a, subject b) ns LEFT JOIN "STU-SCORE" ss ON (    ns.NAME =
                                                                                ss.NAME
                                                                         AND ns.subject =
                                                                                ss.subject
                                                                        )
      

  3.   

    left join 只能连接表,如果我要对数据先做一次查询,比如给表加一个字段class 代表个人所在的班级。bob-1, alice-2, peter-2。如果只查询class=2的学生的情况呢?