簡體   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