gpt4 book ai didi

sql - 在SQL Server 2008中加入Row_Number()

转载 作者:行者123 更新时间:2023-12-04 14:36:55 25 4
gpt4 key购买 nike

我正在尝试使用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之类的东西,但是有什么逻辑上的原因让我无法想到为什么您不能直接加入到功能 row_number()

最佳答案

在内部联接的联接条件下,您将对两个表的笛卡尔积执行过滤。因此,您的操作row_number()结束(按x.a,x.b排序)将不是对表x的操作,而是对笛卡尔乘积的操作。

如果将其置于联接条件下,则系统将处于确定所选候选行的阶段。您不能拥有仅在用于查找结果行的结果行上定义其语义的操作。过滤器将更改结果,并且结果将更改过滤器。

与CTE的区别在于,您可以在中间结果集上定义row_number列,然后进行联接。

关于sql - 在SQL Server 2008中加入Row_Number(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11873388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com