Я пытаюсь создать запрос MS Access для отображения результатов двух классов.Класс A и класс B. Я пытаюсь отобрать 3 лучших ученика с наибольшим количеством баллов, но я не уверен, как это сделать.Прямо сейчас я упорядочиваю его по их NIM (обозначает ID студента)
Я пытался заменить порядок строк на другие, такие как SUM (xx) / sum (xx) DESC, но это не работает.Не могли бы вы помочь мне указать на это?
SELECT *
FROM
(
SELECT
m.NIM AS NIM
, m.Nama_Mhs AS Nama_Mhs
, n.Kelas AS Kelas
, n.Tahun_Akademik AS Tahun
, SUM(k.SKS * Switch(n.Huruf ='A', 4, n.Huruf='B', 3, n.Huruf='C', 2, n.Huruf='D', 1, TRUE, 0)) AS NilaiTotalA
, ROUND(NilaiTotalA / SUM(k.SKS), 2) As NilaiIPKA
FROM
(Master_Mahasiswa m
INNER JOIN
Nilai n
On
m.NIM=n.NIM)
INNER JOIN
Master_MK k
On
k.Kode_MK=n.Kode_MK
GROUP BY
m.NIM
, m.Nama_Mhs
, n.Kelas
, n.Tahun_Akademik
HAVING
n.Kelas ='IK - 2A'
ORDER BY
SUM(k.SKS*SWITCH(n.Huruf='A', 4, n.Huruf='B', 3, n.Huruf='C', 2, n.Huruf='D', 1, TRUE, 0))/SUM(k.SKS) DESC
)
sub1
RIGHT JOIN
(
SELECT
TOP 3 m.NIM AS NIM
, m.Nama_Mhs AS Nama_Mhs
, n.Kelas AS Kelas
, n.Tahun_Akademik AS Tahun
, SUM(k.SKS *SWITCH(n.Huruf='A', 4, n.Huruf='B', 3, n.Huruf='C', 2, n.Huruf='D', 1, TRUE, 0)) AS NilaiTotalB
, ROUND(NilaiTotalB/SUM(k.SKS), 2) AS NilaiIPKB
FROM
(Master_Mahasiswa m
INNER JOIN
Nilai n
ON
m.NIM=n.NIM)
INNER JOIN
Master_MK k
ON
k.Kode_MK=n.Kode_MK
GROUP BY
m.NIM
, m.Nama_Mhs
, n.Kelas
, n.Tahun_Akademik
HAVING
n.Kelas ='IK - 2B'
ORDER BY
SUM(k.SKS*SWITCH(n.Huruf='A', 4, n.Huruf='B', 3, n.Huruf='C', 2, n.Huruf='D', 1, TRUE, 0))/SUM(k.SKS) DESC
)
sub2
ON
MID(sub1.NIM, 11, 2)=MID(sub2.NIM, 11, 2)
ORDER BY
sub2.NIM
UNION
SELECT *
FROM
(
SELECT
TOP 3 m.NIM As NIM
, m.Nama_Mhs As Nama_Mhs
, n.Kelas As Kelas
, n.Tahun_Akademik As Tahun
, SUM(k.SKS * Switch(n.Huruf ='A', 4, n.Huruf='B', 3, n.Huruf='C', 2, n.Huruf='D', 1, TRUE, 0)) AS NilaiTotalA
, ROUND(NilaiTotalA/SUM(k.SKS), 2) AS NilaiIPKA
FROM
(Master_Mahasiswa m
INNER JOIN
Nilai n
ON
m.NIM=n.NIM)
INNER JOIN
Master_MK k
ON
k.Kode_MK=n.Kode_MK
GROUP BY
m.NIM
, m.Nama_Mhs
, n.Kelas
, n.Tahun_Akademik
HAVING
n.Kelas ='IK - 2A'
ORDER BY
SUM(k.SKS*SWITCH(n.Huruf='A', 4, n.Huruf='B', 3, n.Huruf='C', 2, n.Huruf='D', 1, TRUE, 0))/SUM(k.SKS) DESC
)
sub1
LEFT JOIN
(
SELECT
m.NIM AS NIM
, m.Nama_Mhs AS Nama_Mhs
, n.Kelas AS Kelas
, n.Tahun_Akademik AS Tahun
, SUM(k.SKS *SWITCH(n.Huruf='A', 4, n.Huruf='B', 3, n.Huruf='C', 2, n.Huruf='D', 1, TRUE, 0)) AS NilaiTotalB
, ROUND(NilaiTotalB/SUM(k.SKS), 2) AS NilaiIPKB
FROM
(Master_Mahasiswa m
INNER JOIN
Nilai n
ON
m.NIM=n.NIM)
INNER JOIN
Master_MK k
ON
k.Kode_MK=n.Kode_MK
GROUP BY
m.NIM
, m.Nama_Mhs
, n.Kelas
, n.Tahun_Akademik
HAVING
n.Kelas ='IK - 2B'
ORDER BY
SUM(k.SKS*SWITCH(n.Huruf='A', 4, n.Huruf='B', 3, n.Huruf='C', 2, n.Huruf='D', 1, TRUE, 0))/SUM(k.SKS) DESC
)
sub2
ON
MID(sub1.NIM, 11, 2)=MID(sub2.NIM, 11, 2)
ORDER BY
sub2.NIM
;
Я пытаюсь сделать заказ «NilaiIPKA» (в основном средний балл класса A) и «NilaiIPKB» (средний балл класса b).Как мне это сделать?Может ли кто-нибудь помочь с запросом, пожалуйста?Мне нужно закончить это в ближайшее время .. Спасибо
Извините, если код немного грязный, я не знаю, как на самом деле расположить его здесь.Это скриншот моего запроса MS Access https://imgur.com/yzsTRCQ