2017-04-27 63 views
0

我有這個疑問:故障使用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」

我不知道問題出在哪裏 - 任何幫助

回答

2

你需要使用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)) 
0

你不能直接使用它,因爲這不是表格中的一列。使用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 
2

不能直接使用RowNums,

嘗試這樣,

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

試試這個

;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 
1
SELECT t.* 
    FROM 
    (SELECT Reservation.*,ROW_NUMBER() OVER (PARTITION BY code_bien ORDER BY NULL) AS RowNums 
    FROM Reservation) t 
where RowNums = 1 
相關問題