2010-06-11 2 views
1

Это не похоже, что SQL Server Compact Edition поддерживает функцию RANK(). (См. Функции (SQL Server Compact Edition) по адресу http://msdn.microsoft.com/en-us/library/ms174077(SQL.90).aspx).Как бы я дублировал функцию Rank в инструкции SELECT для SQL Server Compact Edition?

Как бы я дублировал функцию RANK() в операторе SELECT SQL Server Compact Edition SELECT.

(. Пожалуйста, используйте Northwind.sdf для любых образцов выбранных утверждений, так как это только один я могу открыть с SQL Server 2005 Management Studio)

ответ

1
SELECT x.[Product Name], x.[Unit Price], COUNT(y.[Unit Price]) Rank 
FROM Products x, Products y 
WHERE x.[Unit Price] < y.[Unit Price] or (x.[Unit Price]=y.[Unit Price] and x.[Product Name] = y.[Product Name]) 
GROUP BY x.[Product Name], x.[Unit Price] 
ORDER BY x.[Unit Price] DESC, x.[Product Name] DESC; 

Решение редактировался Finding ранга студента -SQL Com pact at Finding rank of the student -Sql Compact

+0

+1: Молодец, хорошая находка. Я обновил свой ответ, включив версию ANSI-92 JOIN; вы опубликовали синтаксис объединения ANSI-89. –

1

Использование:

SELECT x.[Product Name], x.[Unit Price], COUNT(y.[Unit Price]) AS Rank 
    FROM Products x 
    JOIN Products y ON x.[Unit Price] < y.[Unit Price] 
        OR ( x.[Unit Price]=y.[Unit Price] 
         AND x.[Product Name] = y.[Product Name]) 
GROUP BY x.[Product Name], x.[Unit Price] 
ORDER BY x.[Unit Price] DESC, x.[Product Name] DESC; 

Ранее:

SELECT y.id, 
     (SELECT COUNT(*) 
     FROM TABLE x 
     WHERE x.id <= y.id) AS rank 
    FROM TABLE y 
+0

Не работает. «Произошла ошибка при анализе запроса. [Номер строки токена = 2, смещение линии токена = 9, токен с ошибкой = ВЫБРАТЬ]» – AMissico