Hy vọng này là tầm thường cho một SQL-Ninja ... Được cố gắng để có được làm việc truy vấn sau đây:Sử dụng bảng xếp hạng năng có nguồn gốc cột trong mệnh đề where (SQL Server 2008)
này là dành cho SQL Server 2008
SELECT
ROW_NUMBER() OVER (ORDER BY Date_Time DESC) AS RowNumber, *
FROM
(SELECT
T.A_ID, T.User_Name, T.Date_Time, T.Value,
U.ID, U.Name, U.Field1, U.Field2,
COUNT(U.ID) OVER() AS TotalRows
FROM
TeeTable as T
INNER JOIN
YouTable AS U ON T.U_ID = U.ID
WHERE
T.Value BETWEEN 222 AND 225) Filtered
WHERE
RowNumber BETWEEN 1 AND 5
Giá trị được phần nào giả tạo để đưa ra một ví dụ cụ thể, nhưng tinh thần của truy vấn được giữ nguyên hoàn toàn. Lỗi tôi nhận được từ tuyên bố này là:
Tên cột không hợp lệ 'RowNumber'.
Nếu tôi xóa mệnh đề WHERE cuối cùng (RowNumber BETWEEN ...), nó trả về tập kết quả mong đợi (A_ID, User_Name, Date_Time vv ...), với RowNumber dưới dạng cột (có giá trị nhạy cảm) các kết quả. Tuy nhiên, tôi không thể so sánh với nó trong mệnh đề WHERE. Tôi rõ ràng đang làm điều gì đó ngu ngốc nhưng điều này đạt đến giới hạn SQL của tôi!
Tôi đã cố gắng sắp xếp lại vị trí này dưới dạng CTE, (VỚI AS được lọc ...) nhưng kết quả cuối cùng cũng giống nhau, có vẻ như đó chỉ là đường cho những gì tôi đã làm.
Ý tưởng? Làm cách nào để lọc cột RowNumber?
Tránh thẻ 'mssql' vì nó dễ bị nhầm lẫn với' mysql' –