xin giúp đỡ viết lệnh SQL

dragonz_vb

New Member
29/11/13
14
2
3
29
có table DIEM :

MASV MAMH LAN DIEM
N001 MH01 1 7
N001 MH02 1 4
N001 MH02 2 2
N002 MH01 1 3
N002 MH01 2 5
N002 MH02 1 5
----------------------------------------------
mình cần viết lệnh SQL để xuất ra điểm là điểm max của 2 lần thi ( cái nào lớn thì lấy ) mà nghĩ mãi k ra.
Tại cần lệnh sql để đưa vào Ireport. Ai rảnh giúp với :(
 
  • Like
Reactions: tanthiluong

trieutulonga

Member
15/2/11
58
6
8
PHP:
List<HocSinh> HS = hocsinhDOA.getAll();
List<MonHoc> MH = monhocDOA.getAll();

StringBuffer sqlBase = new StringBuffer("SELECT MASV,MAMH ,LAN,max(DIEM) where 1=0");

for(HocSinh elementHS : HS){
    for(MonHoc elementMH : MH){
        sqlBase.append(" union SELECT MASV,MAMH ,LAN,max(DIEM) where MASV="+elementHS.getMaHS()+" and MAMH="+elementMH.getMaMonHoc());
    }
}

String sqlResult = sqlBase.toString();
trực tiếp dùng sql thì bạn phải viết vào function ("nếu có hỗ trợ").
bên trên là giải thuật viết bằng java . còn ý tưởng rất đơn giản mỗi học sinh mỗi mộn học lấy điểm cao nhất, tất cả union lại với nhau
 
  • Like
Reactions: tanthiluong

tanthiluong

New Member
27/12/11
3
0
1
Code:
declare @tmpDiem table (MASV varchar(10), MAMH varchar(10), LAN int, DIEM int)
insert @tmpDiem (MASV, MAMH, LAN, DIEM) values ('N001', 'MH01', 1, 7)
insert @tmpDiem (MASV, MAMH, LAN, DIEM) values ('N001', 'MH02', 1, 4)
insert @tmpDiem (MASV, MAMH, LAN, DIEM) values ('N001', 'MH02', 2, 2)
insert @tmpDiem (MASV, MAMH, LAN, DIEM) values ('N002', 'MH01', 1, 3)
insert @tmpDiem (MASV, MAMH, LAN, DIEM) values ('N002', 'MH01', 2, 5)
insert @tmpDiem (MASV, MAMH, LAN, DIEM) values ('N002', 'MH02', 1, 5)

select d.MASV, d.MAMH,d.LAN, d.DIEM
from
(
select MASV, MAMH,  max(DIEM) [MAXDIEM]
from @tmpDiem
group by MASV, MAMH
) as TMP
join @tmpDiem d on tmp.MASV=d.MASV and tmp.MAMH=d.MAMH and tmp.MAXDIEM=d.DIEM