select b.studentname,b.studentid,
(select top 1 classname 
from class_t A where a.classid=b.classid) classname,
(select sum(score) from test where studentid=b.studentid) score
from student_t B
(select top 1 classname from class_t A where a.classid=b.classid) classname问下这里classname是指的class_t第一行classname的结果,还是class_t的classname列所有数据

解决方案 »

  1.   

    是这个(select top 1 classname  
    from class_t A where a.classid=b.classid)查询结果列的别名而已,这一列可能是class_t表中的部分数据,也可能是所有的数据。不过从应用场景来看,应该是这个表的部分数据。关键在a.classid=b.classid这个条件。
      

  2.   

    (select top 1 classname from class_t A where a.classid=b.classid)
    的结果集合
      

  3.   

    studentname   studentid  classname  score
    张三 101 一班 477
    李四 102 二班 395
    王武 103 三班 439
    赵六 104 四班 451
    陈九 105 五班 448
    刘二 106 六班 480
    张1 107 一班 440
    李3 108 二班 437
    王5 109 三班 363
    赵6 110 四班 416
    陈9 111 五班 433
    刘2 112 六班 379
    2三 113 一班 433
    1四 114 二班 463
    3武 115 三班 431如果说是哪一行的结果集,为什么最后classname所有的数据都有啊 二不是第一行的
      

  4.   

    (select top 1 classname from class_t A where a.classid=b.classid) classname这里涉及到两个classname ,第一个classname (top 1之后)的表示的是class_t的一个栏位
    第二个classname 是整个结果集(select top 1 classname from class_t A where a.classid=b.classid)的笔名。
      

  5.   

    select b.studentname,b.studentid,
    (select top 1 classname 
    from class_t A where a.classid=b.classid) classname,
    (select sum(score) from test where studentid=b.studentid) score
    from student_t B结果是studentname  studentid classname score张三 101 一班 477
    李四 102 二班 395
    王武 103 三班 439
    赵六 104 四班 451
    陈九 105 五班 448
    刘二 106 六班 480
    张1 107 一班 440
    李3 108 二班 437
    王5 109 三班 363
    赵6 110 四班 416
    陈9 111 五班 433
    刘2 112 六班 379
    2三 113 一班 433
    1四 114 二班 463
    3武 115 三班 431
    select b.studentname,b.studentid,
    (select top 1 classname 
    from class_t A where a.classid=b.classid) classname,
    (select sum(score) from test where studentid=b.studentid) score
    from student_t B
    where studentid=(select top 1 studentid
    from student_t where classid=b.classid)结果是studentname  studentid classname score张三 101 一班 477
    李四 102 二班 395
    王武 103 三班 439
    赵六 104 四班 451
    陈九 105 五班 448
    刘二 106 六班 480
    为什么加了
    where studentid=(select top 1 studentid
    from student_t where classid=b.classid)
    以后只有六条结果select studentid
    from student_t B where classid=b.classid结果是studentid101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115顺便能帮我看这个吗,既然是where studentid=(select top 1 studentidfrom student_t where classid=b.classid)studentid是结果集,那么应该等于15结果啊。
      

  6.   

    可以这样解释:
    select b.studentname,b.studentid,
    (select top 1 classname  
    from class_t A where a.classid=b.classid) classname,
    (select sum(score) from test where studentid=b.studentid) score
    from student_t B
    where studentid=(select top 1 studentid
    from student_t where classid=b.classid)第一个括号:select top 1 classname  
    from class_t A where a.classid=b.classid 
    是从课程表中选择出学生所在班级的名称classname ,这里用top 1说明学生可能属于多个班级,因此选择第一个班级。第二个括号:select sum(score) from test where studentid=b.studentid) score
    from student_t B
    很明显是求得学生学分总和第三个括号:select top 1 studentid
    from student_t where classid=b.classid
    就是在班级b.classid的班中学好最靠前的一名学生。所以合起来就是,选在在本班级中学号靠前的一名学生的成绩 学号 班级等。
    换句话说就是核对所有的学生,看他是不是他所在班级学号的最前一名,是的话就显示。