ceate view test_a
as
select a.*,b.解答人,得分=isnull(b.得分,0) from 試題 as  a,解答題 as b where a.試題ID=b.試題ID and a.試卷ID=b.a.試卷ID執行
select * from test_a

解决方案 »

  1.   

    --建立测试环境
    Create Table 试题
    (试题ID Int,
     试卷号 Int,
     大题号 Int,
     小题号 Int,
     分值 Int)Create Table 解答表
    (ID Int,
     试题ID Int,
     解答人 Varchar(10),
     得分 Int)
    --插入数据
    Insert 试题 Values(1,1,1,1,15)
    Insert 试题 Values(2,1,1,2,15)
    Insert 试题 Values(3,1,1,3,15)
    Insert 试题 Values(4,1,2,1,20)
    Insert 试题 Values(5,1,2,2,20)
    Insert 试题 Values(6,1,3,1,15)Insert 解答表 Values(1,1,'a',10)
    Insert 解答表 Values(2,3,'a',5)
    Insert 解答表 Values(3,1,'b',15)
    Insert 解答表 Values(4,5,'b',NULL)
    GO
    --测试
    Create View List
    As
    Select TOP 100 Percent 
    A.*,B.解答人,IsNull(C.得分,0) As 得分
    from 试题 A
    Full Join (Select Distinct 解答人 from 解答表) B
    On 1=1
    Left Join 解答表 C
    On A.试题ID=C.试题ID And B.解答人=C.解答人
    Order By B.解答人,A.试题ID
    GO
    Select * from List--删除测试环境
    Drop View List
    Drop Table 试题,解答表
    --结果
    /*
    试题ID 试卷号 大题号 小题号 分值 解答人 得分
    1 1 1 1 15 a 10
    2 1 1 2 15 a 0
    3 1 1 3 15 a 5
    4 1 2 1 20 a 0
    5 1 2 2 20 a 0
    6 1 3 1 15 a 0
    1 1 1 1 15 b 15
    2 1 1 2 15 b 0
    3 1 1 3 15 b 0
    4 1 2 1 20 b 0
    5 1 2 2 20 b 0
    6 1 3 1 15 b 0
    */
      

  2.   

    ceate view test_a
    as
    select a.*,b.解答人,得分=isnull(b.得分,0) 
    from 試題 as a left outer join 解答題 as b 
    on a.試題ID=b.試題ID
      

  3.   

    ceate view test_a
    as
    select a.*,b.解答人,得分=isnull(b.得分,0) 
    from 試題 a left outer join 解答題 b 
    on a.試題ID=b.試題ID