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
115where studentid=(select top 1 studentid from student_t where classid=b.classid)studentid是结果集,那么应该等于15结果啊。

解决方案 »

  1.   

     top 1 只返回每个班的第一个
      

  2.   


    http://topic.csdn.net/u/20100824/16/9d4b7bc7-0b83-4ea5-a891-e1d32cbf53a2.html?seed=1442714353&r=67908751#r_67908751
      

  3.   

    好乱啊!select studentid
    from student_t B where classid=b.classid 这样的语句?可以是可以,但是没人会这样写的。
      

  4.   

    张三 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)
    就是查每个班的第一个学生,也就是六条数据。张三 101 一班 477
    李四 102 二班 395
    王武 103 三班 439
    赵六 104 四班 451
    陈九 105 五班 448
    刘二 106 六班 480