Реферат: MS SQL 2005: оконные функции
FROM sample WHERE ID_Customer = 2
ID_Cust Amnt N_Row RANK D_RANK NTILE
-------------------------------------------------------
2 400 1 1 1 1
2 220 2 2 2 1
2 202 3 3 3 2
2 200 4 4 4 2
2 200 5 4 4 3
2 100 6 6 5 4
Некоторые примеры использования
Как уже говорилось, практически все, что можно сделать с помощью аналитических функций, можно сделать и без них, но с их использованием требуемого эффекта можно добиться проще и, зачастую, оптимальнее...
Поскольку теперь появилась возможность нумеровать записи в выборке, можно воспользоваться этим для постраничной выдачи результата. Запрос будет выглядеть примерно так:
WITH Numbered ( SELECT ROW_NUMBER() OVER(ORDER BY name) N_Row, * FROM sysobjects ) SELECT * FROM Numbered WHERE N_Row between @First AND @Last |
Как ни странно, этот запрос будет выполняться примерно в два раза быстрее классического:
EXECUTE ('SELECT * FROM (SELECT TOP ' + @Count + ' * FROM (SELECT TOP ' + @Last + ' * FROM sysobjects ORDER BY name ASC ) SO1 ORDER BY name DESC) SO2 ORDER BY name') |
Так что сбылась еще одна мечта, об эффективной и простой постраничной выборке.. :)
Еще один пример, где использование аналитических функций может быть и удобным, и эффективным. Нередко требуется вывести, например, два самых крупных заказа для каждого клиента. Может случиться так, что заказов с максимальной суммой окажется больше двух. Для случая, когда заказов должно быть именно два, запрос может выглядеть так:
WITH Ranked as К-во Просмотров: 284
Бесплатно скачать Реферат: MS SQL 2005: оконные функции
|