簡體   English   中英

使用ROW_NUMBER()超過(PARTITION BY

[英]Trouble using ROW_NUMBER() OVER (PARTITION BY

我有這個查詢:

SELECT  
    Reservation.*, 
    ROW_NUMBER() OVER (PARTITION BY code_bien ORDER BY (SELECT NULL)) AS RowNums 
FROM 
    Reservation  
WHERE
    RowNums = 1 

我收到此錯誤:

消息207,第16級,狀態1,第2行
無效的列名“ RowNums”。

我不知道問題出在哪里-有幫助嗎?

您不能直接使用RowNums,

這樣嘗試

SELECT *
FROM
(   
    SELECT  Reservation.*,ROW_NUMBER() OVER (PARTITION BY code_bien ORDER BY (SELECT NULL)) AS RowNums 
    FROM Reservation
) S  
where RowNums = 1

您需要使用CTE:

WITH tempData AS
(
 SELECT  Reservation.*, 
 ROW_NUMBER() OVER (PARTITION BY code_bien ORDER BY (SELECT NULL)) AS RowNums 
 FROM Reservation 
)

SELECT * FROM tempData WHERE RowNums = 1

但是,更干凈的方法是使用WITH TIES

SELECT TOP 1 WITH TIES *
FROM Reservation
ORDER BY ROW_NUMBER() OVER (PARTITION BY code_bien ORDER BY (SELECT NULL))
   SELECT t.*
    FROM
    (SELECT Reservation.*,ROW_NUMBER() OVER (PARTITION BY code_bien ORDER BY NULL ) AS RowNums 
    FROM Reservation) t  
where RowNums = 1

您不能直接使用它,因為它不是表中的一列。 使用CTE或派生表。

CTE

:WITH C AS (
    SELECT  Reservation.*,ROW_NUMBER() OVER (PARTITION BY code_bien ORDER BY (SELECT NULL)) AS RowNums 
)
SELECT * FROM C WHERE RowNums = 1 

嘗試這個

;WITH CTE AS(
SELECT  Reservation.*,
ROW_NUMBER() OVER (PARTITION BY code_bien ORDER BY (SELECT NULL)) AS RowNums
FROM Reservation)
SELECT * FROM CTE
WHERE RowNums = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM