Как сделать заказ по количеству баллов в MS Access? - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь создать запрос 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...