Man*_*265 2 sql-server window-functions sql-server-2014
我有一个查询,其中包含一个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
我想在 WHERE 子句中使用 Rnk 列
的Rnk
是中计算的列SELECT
子句。它WHERE
在同一级别的子句中不可用,因为查询执行的逻辑顺序是FROM -> WHERE -> SELECT
。
您必须将查询包装在子查询中。您可以使用CTE(公用表表达式):
USE SMSResults ;
go
with CTE as
( 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')
select * from CTE
where rnk > 1 -- change here with whatever you want ... !!
ORDER BY Year DESC ;
Run Code Online (Sandbox Code Playgroud)
或派生表:
USE SMSResults ;
go
select * from
( 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')
AS derived_table
where rnk > 1 -- change here with whatever you want ... !!
ORDER BY Year DESC ;
Run Code Online (Sandbox Code Playgroud)
作为未来读者的附注 - 值得一读 - CTE 和临时表之间有什么区别?通过JNK?
归档时间: |
|
查看次数: |
7862 次 |
最近记录: |