2017-04-27 64 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 
相关问题