首页 > 解决方案 > 根据另一个表更新一个表中每个学生的最高分

问题描述

在这里,我有几个表,如下所示:

表 SINHVIEN:

MaSV    HoSV         TenSV    GioiTinh      NgaySinh    NoiSinh     MaKH    HocBong     DiemTB 
SV01    Lê Kim       Lan      Nữ            23/02/1990  Hà nội      HTTT    130000  
SV02    Trần Minh    Chánh    Nam           24/12/1992  Bình Định   MANG    150000  
SV03    Lê An        Tuyết    Nữ            21/02/1991  Hải phòng   HTTT    170000  
SV04    Trần Anh     Tuấn     Nam           20/12/1993  TpHCM       MANG    80000   
SV05    Trần Thị     Mai      Nữ            12/08/1991  TpHCM       CNPM    0   
SV06    Lê Thị Thu   Thủy     Nữ            02/01/1991  An Giang    HTTT    0   
SV07    Nguyễn Kim   Thư      Nữ            02/02/1990  Hà Nội      CNPM    180000  
SV08    Lê Văn       Long     Nam           08/12/1992  TpHCM        HTTT   190000  

表 KETQUA:

Masv    MaMH    LanThi  Diem    KetQua 
SV01    CSDL    1        3  
SV01    CSDL    2        6  
SV01    TTNT    1       5.5     
SV01    TTNT    2        6  
SV01    MMT     1        5  
SV02    CSDL    1       4.5     
SV02    CSDL    2        7  
SV02    MMT     1       10  
SV02    CTDL    1        9  
SV03    CSDL    1        2  
SV03    CSDL    2        5  
SV03    MMT     1       2.5     
SV03    MMT     2        4  
SV04    CSDL    1       4.5     
SV04    CTDL    1        10     
SV05    CSDL    1        7  
SV05    MMT     1       2.5     
SV05    MMT     2        5  
SV06    TTNT    1        6  
SV06    DHMT    1       10  

我想根据 KETQUA 表中的 DIEM 列为每个学生更新 DiemTB(这是每个学生的最高分),以便为 Sinhvien 表中的每个 MonHoc 更新。

到目前为止我的代码:

UPDATE SINHVIEN
SET DIEMTB = T2.DIEM
FROM SINHVIEN JOIN KETQUA T2 
ON SINHVIEN.MASV = T2.MASV AND T2.DIEM = (SELECT MAX(DIEM) FROM KETQUA GROUP BY MASV)

我知道没有像这样为每个学生更新 DIEM 的正确方法,因为该语句(SELECT MAX(DIEM) FROM KETQUA GROUP BY MASV)返回每个学生的最高分数,但 T2.DIEM 一次可以处理一个学生。您能帮我更改修改此代码,以便我的代码可以根据 KETQUA 表上的 DIEM 更新 Sinhvien 表中每个学生的最高分吗?谢谢!

标签: sqlsql-server

解决方案


这也应该使用类似于您的尝试的连接工作

UPDATE SINHVIEN
SET DIEMTB = T2.MAXDIEM
FROM SINHVIEN JOIN 
    (SELECT MAX(DIEM) AS MAXDIEM, MASV FROM KETQUA GROUP BY MASV) T2
ON SINHVIEN.MASV = T2.MASV

推荐阅读