我正在研究学生数据库,并希望根据列中的主题结果获取学生在班级中的位置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)
下面是我的数据库
您的代码是 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 中使用参数