繁体   English   中英

加入SQL Server 2008中的Row_Number()

[英]Joining on Row_Number() in SQL Server 2008

我正在尝试使用row_number()加入CTE。

使用此语法

select row_number() over(order by x.patientid, x.dischargedate) as rn
         ,* from x
    inner join x as x2 on row_number() over(order by x.patientid,    x.dischargedate)=row_number() over(order by x2.patientid, x2.dischargedate)

CTE x做我想要的但是当我尝试连接行号时我得到错误Msg 4108, Level 15, State 1, Line 35 Windowed functions can only appear in the SELECT or ORDER BY clauses.

我知道我可以在CTE本身中包含row_number并给它一个列名,然后加入像x.rn这样的x.rn但是有任何逻辑上的原因我无法想到为什么你不能直接加入function row_number()

在内连接的连接条件中,您正在对两个表的笛卡尔积进行过滤。 因此,您的操作row_number()over(按xa,xb排序)将不是对表x的操作,而是对笛卡尔生产的操作。

如果你想在连接条件下使用它,系统就会处于确定你选择的候选行的阶段。 您不能拥有仅在用于查找结果行的结果行上定义其语义的操作。 过滤器会更改结果,结果会更改过滤器。

与CTE的不同之处在于,您在中间结果集上定义了row_number列, 然后执行连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM