简体   繁体   中英

Trouble using ROW_NUMBER() OVER (PARTITION BY

I have this query :

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

I get this error :

Msg 207, Level 16, State 1, Line 2
Invalid column name 'RowNums'.

I don't know where the problem is - any help?

You can't use RowNums directly,

Try like this,

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

You'd need to use a 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

However, a cleaner approach would be to use 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

You cannot use this directly as this is not a column in the table. Either use CTE or derived table.

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 

Try this

;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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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