我有一个在 Microsoft SQL 服务器中运行的查询,它运行良好。它使用了 CTE,因为我加入了三个表。内部查询中的前两个,然后是外部查询。然而,当我在我的网络服务器上尝试这个时,它只安装了 MySQL,我无法运行查询。有什么方法可以使用该结构运行查询吗?这是一个示例:
USE UNAMupdates;
with CTE as
( SELECT tbl_modules.module_code
FROM tbl_student
JOIN tbl_modules ON tbl_student.registration_year = tbl_modules.registration_year
WHERE tbl_student.student_number='1002')
SELECT tbl_notifications.module_name,tbl_notifications.message,tbl_notifications.staff_username,tbl_notifications.date_time
FROM CTE JOIN tbl_notifications
ON cte.module_code = tbl_notifications.module_code
ORDER BY tbl_notifications.date_time DESC
Run Code Online (Sandbox Code Playgroud)
我想要实现的是查询单个学生选择的所有模块/主题,然后找出该主题是否有任何通知/新闻项目可用。
我有一个查询,我在其中进行了一些计算,然后为该列指定了别名。在下一列中,我想在 IF 语句中使用该计算的结果。当我将别名用作条件时,MySQL 无法识别它,而是要求我重写整个查询,在它周围放置一些括号,然后执行条件检查。
这是 SQL 查询:
SELECT StudentId
,SubjectID
, (COUNT(StudentId) / (
SELECT COUNT(SubjectID)
FROM lectureattendancein
WHERE SubjectID ='MIS4' ) * 100) AS Percentage
, IF((COUNT(StudentId) / (
SELECT COUNT(SubjectID)
FROM lectureattendancein
WHERE SubjectID ='MIS4'
)* 100) >= 80, 'ALLOWED', 'NOT ALLOWED') AS ExamAdmit
FROM attendancein
GROUP BY StudentId, SubjectID
HAVING SubjectID='MIS4'
ORDER BY StudentId ASC
Run Code Online (Sandbox Code Playgroud)
我想在 IF 语句中使用名为Percentage的列别名
我有一个查询,其中包含一个RANK() OVER
函数,但我想在后面的 WHERE 子句中使用此列上显示的结果。我怎么写,因为我看过的所有其他问题都没有,RANK() OVER
而且似乎更容易做到。这是声明:
USE SMSResults
SELECT Student_No,Result,Module_Name,Semester,Year,RANK() OVER (PARTITION BY Student_No ORDER BY Semester DESC) AS Rnk
FROM tbl_results
WHERE Student_No = '201409'
ORDER BY Year DESC
Run Code Online (Sandbox Code Playgroud)
我想使用子句中的Rnk
列WHERE
我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE
在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。
我当前的查询如下所示:
SELECT * FROM tbl_item_trans
WHERE (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)
但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。
我怎么解决这个问题?如果我只使用专栏的DATE
一部分,那就更好了datetime
。
在@start
与@end
变量使用date
的数据类型,例如“2017年9月16日”。