2017-07-07 177 views
0
select ROW_NUMBER() over(PARTITION by number order by number) as rn 
from (select t1.id as number, 
      t1.name as name from #a as T1 
     join #a T2 on T1.id=T2.id) 

为什么这个查询不工作为什么这个查询不工作

它显示错误.....

消息102,级别15,状态1,行6 附近有语法错误)”。

+10

末尾缺少别名。 '..T1.id = T2.id)a' –

+2

“按数字顺序进行分区”没有意义。按列或按列排序,而不是两者。 – Peter

回答

3

MSSQL要求派生表(from子句中的子查询)为named。只需将您的查询改为:

select ROW_NUMBER() over(PARTITION by number order by number)as rn 
from 
( 
select t1.id as number,t1.name as name from #a as T1 join #a T2 on T1.id=T2.id 
) subquery1 

应该解决您的问题。

+0

正确的术语是“派生表”(这是子查询的一种特殊形式)。更多信息[这里](https://www.programmerinterview.com/index.php/database-sql/derived-table-vs-subquery/)。 –

+0

@TT。我认为“派生表”是表子查询的结果?似乎很好,在名称“subquery1”中给出这个东西。 – LukStorms

+0

@LukStorms我不是指别名,而是他在第一句中使用的术语“subselect”。 –