Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос на собеседовании, СЛОЖНЫЙ! 
V
    Опции темы
arilou
Дата 10.6.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(Softaz @  10.6.2006,  18:12 Найти цитируемый пост)
В MSSQL 2005 появилясь функция Row_Number() для постраничного извлечения данных.

Круто, не знал. Спасибо за инфу! 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Softaz
Дата 10.6.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



Цитата(arilou @  10.6.2006,  22:40 Найти цитируемый пост)
Круто, не знал. Спасибо за инфу! 

Пожалуйста, только лучше сделать так (т.к. Row_Number() влияет на _итоговые_ строки после выборки, поэтому тот пример малость мертвый):
Код

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[prGetOrders_Paged] @nStartRowNum int, @nRowCount int
    -- Add the parameters for the stored procedure here

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * FROM
        (SELECT   Row_Number() OVER (ORDER BY OrderDate DESC) AS RowNum,    
             SalesOrderID, CustomerID, OrderDate    
        FROM     Sales.SalesOrderHeader    ) O 
        WHERE    RowNum between @nStartRowNum and @nStartRowNum + @nRowCount - 1
        ORDER BY OrderDate DESC
END


Добавлено @ 23:51 
Вот еще несколько интересных функций:

Код

SELECT Row_Number() OVER (ORDER BY City) AS RowNum,
    Rank() OVER (ORDER BY City) AS Rank,
    Dense_Rank() OVER (ORDER BY City) AS DenseRank,
    NTile(3) OVER (ORDER BY City) AS NTile_3,
    NTile(4) OVER (ORDER BY City) AS NTile_4,
    City, StateProvinceCode
FROM Person.Address AS Address
        INNER JOIN Person.StateProvince AS StateProv
        ON Address.StateProvinceID = StateProv.StateProvinceID
WHERE CountryRegionCode = 'US'
 AND StateProvinceCode = 'AZ


Все примеры делались на базе AdventureWorks (входит в MSSQL2005).

Rank() - равным значениям присваиваются одинаковые номера;
Dense_Rank() - тоже, что и Rank() плюс удаляет проб. в посл-ти номеров;
NTile() - разбивка группы строк на одинаковые или близкие части, а если не может, включает большее число строк в группы с меньшими номерами.

Результат того запроса:
Код

1    1    1    1    1    Chandler    AZ 
2    1    1    1    1    Chandler    AZ 
3    1    1    1    1    Chandler    AZ 
4    1    1    1    1    Chandler    AZ 
5    5    2    1    1    Gilbert    AZ 
6    6    3    1    2    Lemon Grove    AZ 
7    6    3    2    2    Lemon Grove    AZ 
8    8    4    2    2    Mesa    AZ 
9    9    5    2    2    Phoenix    AZ 
10    9    5    2    2    Phoenix    AZ 
11    9    5    2    3    Phoenix    AZ 
12    9    5    2    3    Phoenix    AZ 
13    9    5    3    3    Phoenix    AZ 
14    14    6    3    3    Scottsdale    AZ 
15    14    6    3    4    Scottsdale    AZ 
16    16    7    3    4    Surprise    AZ 
17    17    8    3    4    Tucson    AZ 
18    17    8    3    4    Tucson    AZ 
 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.