Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ORDER BY DEFAULT  [new]
Alexandr Vladykin
Member

Откуда:
Сообщений: 2
Добрый день!

Необходимо создать запрос

SELECT ROW_NUMBER OVER (ORDER BY DEFAULT) RN, * FROM TABLE

ORDER BY DEFAULT означает что номер записи мне нужен по порядку - тот, под которым она будет в БД при условии, если ORDER BY не задан.

Возможно ли такое сделать?

Пишу общую библиотеку, поэтому что такое TABLE и какая структура будет у TABLE не знаю - может быть самая разная, в том числе множество подзапросов.
6 июл 09, 22:31    [7383520]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
_djХомяГ
Guest
не очень понятно - если нужен "формальный" ORDER BY без сортировки как таковой - то можно так
OVER (ORDER BY (SELECT 1)) 
6 июл 09, 22:39    [7383538]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
Alexandr Vladykin
Member

Откуда:
Сообщений: 2
_djХомяГ,

Именно это и нужно! Спасибо!
6 июл 09, 22:50    [7383567]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
_djХомяГ
Guest
PS
с ROW_NUMBER такой "трюк" прокатит, а вот с ранжирующими ф-циями (RANK и тп) нет - там обязательно должна быть указана сортировка
6 июл 09, 22:56    [7383571]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Alexandr Vladykin
_djХомяГ,

Именно это и нужно! Спасибо!


Но это не гарантирует, что "что номер записи - тот, под которым она будет в БД при условии, если ORDER BY не задан." Потому что нет такого порядка. Если Order By не указан, то при одних и тех же данных один и тот же запрос может вернуть записи в разном порядке.
7 июл 09, 02:28    [7383856]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31194
Alexandr Vladykin
ORDER BY DEFAULT означает что номер записи мне нужен по порядку - тот, под которым она будет в БД при условии, если ORDER BY не задан.
В БД порядка нет. Запрос к таблице без ORDER BY может возвращать данные в разном порядке.

Alexandr Vladykin
Пишу общую библиотеку, поэтому что такое TABLE и какая структура будет у TABLE не знаю - может быть самая разная, в том числе множество подзапросов.
Так можно писать какой-нибуть временный импорт, а общую библиотеку нужно писать правильно.
7 июл 09, 08:49    [7384072]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
_djХомяГ
PS
с ROW_NUMBER такой "трюк" прокатит, а вот с ранжирующими ф-циями (RANK и тп) нет - там обязательно должна быть указана сортировка
А почему у меня работает вот это
SELECT RANK()OVER(ORDER BY(SELECT 1))
FROM sys.objects
?
PRINT @@VERSION
Microsoft SQL Server 2005 - 9.00.3239.00 (X64)
Apr 9 2008 22:41:28
Copyright (c) 1988-2005 Microsoft Corporation
PRINT @@VERSION
Microsoft SQL Server 2008 (SP1) - 10.0.2710.0 (Intel X86)
Apr 7 2009 21:27:58
Copyright (c) 1988-2008 Microsoft Corporation
7 июл 09, 08:51    [7384075]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
ветерочек
Member

Откуда: СПБ
Сообщений: 153
iap
_djХомяГ
PS
с ROW_NUMBER такой "трюк" прокатит, а вот с ранжирующими ф-циями (RANK и тп) нет - там обязательно должна быть указана сортировка
А почему у меня работает вот это
SELECT RANK()OVER(ORDER BY(SELECT 1))
FROM sys.objects
?
PRINT @@VERSION
Microsoft SQL Server 2005 - 9.00.3239.00 (X64)
Apr 9 2008 22:41:28
Copyright (c) 1988-2005 Microsoft Corporation
PRINT @@VERSION
Microsoft SQL Server 2008 (SP1) - 10.0.2710.0 (Intel X86)
Apr 7 2009 21:27:58
Copyright (c) 1988-2008 Microsoft Corporation

работает это типа ошибку не выдает?
только единицы выдает одни :))
7 июл 09, 09:07    [7384108]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
ветерочек
iap
_djХомяГ
PS
с ROW_NUMBER такой "трюк" прокатит, а вот с ранжирующими ф-циями (RANK и тп) нет - там обязательно должна быть указана сортировка
А почему у меня работает вот это
SELECT RANK()OVER(ORDER BY(SELECT 1))
FROM sys.objects
?
PRINT @@VERSION
Microsoft SQL Server 2005 - 9.00.3239.00 (X64)
Apr 9 2008 22:41:28
Copyright (c) 1988-2005 Microsoft Corporation
PRINT @@VERSION
Microsoft SQL Server 2008 (SP1) - 10.0.2710.0 (Intel X86)
Apr 7 2009 21:27:58
Copyright (c) 1988-2008 Microsoft Corporation

работает это типа ошибку не выдает?
только единицы выдает одни :))
Но ведь это правильно!
Ибо значение выражения в ORDER BY одинаково на всех строках.
7 июл 09, 09:16    [7384134]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
_djХомяГ
Guest
iap

А почему у меня работает вот это
SELECT RANK()OVER(ORDER BY(SELECT 1))
FROM sys.objects
?


ветерочек

работает это типа ошибку не выдает?
только единицы выдает одни :))


Вопрос философский и с таким гуру, как iap не поспоришь!

Просто моё IMHO совпадает с ветерочек в плане того, что ранжирующие функции должны выдавать "валидный" результат - т е ORDER BY играет в них ключевую роль (на то они и ранжирующие). Например,



create table #test (id int)

INSERT INTO #test VALUES(7)
INSERT INTO #test VALUES(7)
INSERT INTO #test VALUES(10)
INSERT INTO #test VALUES(12)
INSERT INTO #test VALUES(9)
INSERT INTO #test VALUES(12)


SELECT RANK () OVER (ORDER BY id) AS rankRes,
          DENSE_RANK () OVER (ORDER BY id) AS denseRes,
          id
     FROM #test
GO

rankRes              denseRes             id
-------------------- -------------------- -----------
1                    1                    7
1                    1                    7
3                    2                    9
4                    3                    10
5                    4                    12
5                    4                    12

(6 row(s) affected)



SELECT RANK () OVER (ORDER BY (select 1)) AS rankRes,
          DENSE_RANK () OVER (ORDER BY (select 1)) AS denseRes,
          id
     FROM #test
GO


rankRes              denseRes             id
-------------------- -------------------- -----------
1                    1                    7
1                    1                    7
1                    1                    10
1                    1                    12
1                    1                    9
1                    1                    12


(6 row(s) affected)

Результат второго запроса достаточно "бессмысленный"

А вот для ROW_NUMBER в некоторых случаях ORDER BY не играет особой роли и нужна только "группировка" (например в задаче удалить дублирующие значения можно указывать "фиктивный" ORDER BY)
7 июл 09, 11:39    [7385047]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
_djХомяГ
Результат второго запроса достаточно "бессмысленный"
Что значит "бессмысленный", если это именно то, что клиент попросил сделать сервер
в соответствии с документированными правилами?
С точки зрения сервера всё просто отлично.
7 июл 09, 12:55    [7385559]     Ответить | Цитировать Сообщить модератору
 Re: ORDER BY DEFAULT  [new]
_djХомяГ
Guest
iap
_djХомяГ
Результат второго запроса достаточно "бессмысленный"
Что значит "бессмысленный", если это именно то, что клиент попросил сделать сервер
в соответствии с документированными правилами?
С точки зрения сервера всё просто отлично.

В этом смысле ,конечено, да

Но вопрос в другом - какой толк от этого результата , в каких случаях на практике нужно получить именно такой результат, используя ранжирующие функции? Не проще было бы написать, например :

select 1 as rankRes,1 as denseRes,id
from #test


Повторюсь:
_djХомяГ

Вопрос философский и с таким гуру, как iap не поспоришь!
7 июл 09, 13:05    [7385661]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить