学生在考试中的位置给我错误

-5 sql-server sql-server-2012

我正在研究学生数据库,并希望根据列中的主题结果获取学生在班级中的位置f_score

我收到一条错误消息:

关键字“ORDER”附近的语法不正确

我正在使用 VB.NET 和 Microsoft SQL Server 2012。这些代码是 MySQL,我想将它们重新写入 SQL Server。这是我正在使用的代码:

Dim str1 As String = "SELECT studentid, f_score, FIND_IN_SET(  sum(f_score),
    (SELECT GROUP_CONCAT( DISTINCT sum(f_score) 
    ORDER BY sum(f_score) DESC ) FROM assessment )) AS rank 
FROM assessment where studentid='" & strid & "' and stuclass='" & strclass & "'; "`
Run Code Online (Sandbox Code Playgroud)

该 SQL 是:

SELECT 
    studentid, 
    f_score, 
    FIND_IN_SET(sum(f_score), 
        (SELECT 
           GROUP_CONCAT(DISTINCT sum(f_score) ORDER BY sum(f_score) DESC) 
        FROM assessment
        )
    ) AS rank 
FROM 
    assessment 
WHERE
    studentid='" & strid & "' and stuclass='" & strclass & "'; "  
Run Code Online (Sandbox Code Playgroud)

下面是我的数据库

在此处输入图片说明

Mar*_*ith 5

您的代码是 MySQL 语法而不是 SQL Server。

要在 SQL Server 中实现这一点,您将使用 DENSE_RANK

SELECT *
FROM   (SELECT studentid,
               f_score = SUM(f_score),
               rank = DENSE_RANK() OVER (ORDER BY SUM(f_score) DESC)
        FROM   assessment
        WHERE  stuclass = @StuClass
        GROUP  BY studentid) T
WHERE  studentid = @StudentId;
Run Code Online (Sandbox Code Playgroud)

您也对 SQL 注入持开放态度。您应该使用参数化查询。

请参阅此链接了解如何在 VB.NET 中使用参数