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

Откуда:
Сообщений: 300
есть таблица типов документов:
create table TDocumentType(
	DocumentTypeID int identity(1, 1) not null primary key
	, VERSION int not null default(1)
	, Code nvarchar(10) not null
	, Name nvarchar(254) not null
)
go

DocumentTypeID в этой таблице имеет такую последовательность:
DocumentTypeID
2
3
4
7
9
11
12
13
14
15
16
17
18
20
24
25
27
28
29
30
31
32
101
103


для совместимости со старым софтом сделал представление:
create view document
as
select
	DocumentTypeID as id_documen
	, CAST(Code as varchar(5)) as document
	, CAST(Name as varchar(100)) as remark
	, CAST((case
		when DocumentTypeID = 2 then 2
		when DocumentTypeID = 101 then 1
		else 0
	  end) as int) as prev_doc_rang
	, CAST(1 as bit) as not_del
	, CAST(0 as bit) as s_del
	, cast(null as int) as status
	, cast(null as int) as nNumb
from TDocumentType
go

но когда делаешь сам запрос
select * from document

то результат выходит такой:
id_documen
32
3
2
20
27
4
12
17
15
11
7
14
101
103
16
9
29
30
13
24
25
31
18
28


вот сижу ломаю голову, как сделать сортировку в представлении, чтобы выходной результат был, как в TDocumentType

может подскажет кто?
29 ноя 11, 14:07    [11677792]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Azomorph
вот сижу ломаю голову, как сделать сортировку в представлении, чтобы выходной результат был, как в TDocumentType

может подскажет кто?
Порядок записей в резалтсете может гарантировать только ORDER BY в самом внешнем запросе.
29 ноя 11, 14:10    [11677821]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iap
Azomorph
вот сижу ломаю голову, как сделать сортировку в представлении, чтобы выходной результат был, как в TDocumentType

может подскажет кто?
Порядок записей в резалтсете может гарантировать только ORDER BY в самом внешнем запросе.
В данном случае - в запросе из Вашего представления
29 ноя 11, 14:11    [11677832]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
Azomorph
Member

Откуда:
Сообщений: 300
iap
Azomorph
вот сижу ломаю голову, как сделать сортировку в представлении, чтобы выходной результат был, как в TDocumentType

может подскажет кто?
Порядок записей в резалтсете может гарантировать только ORDER BY в самом внешнем запросе.


хм.... ну а почему представление так перемешивает результат выборки?


да, забыл про версию сервера сказать:
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2772.0 (Intel X86)   Aug  9 2011 15:21:55   Copyright (c) Microsoft Corporation  Standard Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2) 
29 ноя 11, 14:12    [11677840]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Azomorph
хм.... ну а почему представление так перемешивает результат выборки?


Потому что это называется отсутствие сортировки.
29 ноя 11, 14:14    [11677869]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
Azomorph
Member

Откуда:
Сообщений: 300
Glory
Azomorph
хм.... ну а почему представление так перемешивает результат выборки?


Потому что это называется отсутствие сортировки.


т.к. order by в запросе представления нельзя использовать, то сортировка возможна только во внешнем запросе получается...

ладно... попробую второй вариант:
create view document
as
select
	DocumentTypeID as id_documen
	, CAST(Code as varchar(5)) as document
	, CAST(Name as varchar(100)) as remark
	, CAST((case
		when DocumentTypeID = 2 then 2
		when DocumentTypeID = 101 then 1
		else 0
	  end) as int) as prev_doc_rang
	, CAST(1 as bit) as not_del
	, CAST(0 as bit) as s_del
	, cast(null as int) as status
	, cast(null as int) as nNumb
	, ROW_NUMBER() OVER(order by DocumentTypeID) as [order]
from TDocumentType
go
так показывает в нужном порядке, но фокспрошная софтина довольно капризная, надеюсь проглотит его
29 ноя 11, 14:22    [11677957]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Azomorph
т.к. order by в запросе представления нельзя использовать, то сортировка возможна только во внешнем запросе получается...


Написать можно
Но учитываться будет только order by в самом внешнем запросе
29 ноя 11, 14:23    [11677977]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
Azomorph
Member

Откуда:
Сообщений: 300
Glory
Azomorph
т.к. order by в запросе представления нельзя использовать, то сортировка возможна только во внешнем запросе получается...


Написать можно
Но учитываться будет только order by в самом внешнем запросе

ясно
29 ноя 11, 14:25    [11677994]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Azomorph,

можно, конечно примеить недокументированный фокус, но без всяких гарантий:
create view document
as
select (select 100) percent
	DocumentTypeID as id_documen
	, CAST(Code as varchar(5)) as document
	, CAST(Name as varchar(100)) as remark
	, CAST((case
		when DocumentTypeID = 2 then 2
		when DocumentTypeID = 101 then 1
		else 0
	  end) as int) as prev_doc_rang
	, CAST(1 as bit) as not_del
	, CAST(0 as bit) as s_del
	, cast(null as int) as status
	, cast(null as int) as nNumb
from TDocumentType
order by DocumentTypeID;
29 ноя 11, 14:26    [11678002]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iap
Azomorph,

можно, конечно примеить недокументированный фокус, но без всяких гарантий:
create view document
as
select top (select 100) percent
	DocumentTypeID as id_documen
	, CAST(Code as varchar(5)) as document
	, CAST(Name as varchar(100)) as remark
	, CAST((case
		when DocumentTypeID = 2 then 2
		when DocumentTypeID = 101 then 1
		else 0
	  end) as int) as prev_doc_rang
	, CAST(1 as bit) as not_del
	, CAST(0 as bit) as s_del
	, cast(null as int) as status
	, cast(null as int) as nNumb
from TDocumentType
order by DocumentTypeID;
29 ноя 11, 14:27    [11678009]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Azomorph
а почему представление так перемешивает результат выборки?
Представление ничего не перемешивает. Это тупо кусок сроки, подставляемое в запрос.
29 ноя 11, 14:32    [11678045]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
Azomorph
Member

Откуда:
Сообщений: 300
iap
Azomorph,

можно, конечно примеить недокументированный фокус, но без всяких гарантий:
create view document
as
select (select 100) percent
	DocumentTypeID as id_documen
	, CAST(Code as varchar(5)) as document
	, CAST(Name as varchar(100)) as remark
	, CAST((case
		when DocumentTypeID = 2 then 2
		when DocumentTypeID = 101 then 1
		else 0
	  end) as int) as prev_doc_rang
	, CAST(1 as bit) as not_del
	, CAST(0 as bit) as s_del
	, cast(null as int) as status
	, cast(null as int) as nNumb
from TDocumentType
order by DocumentTypeID;


пробовал, но тоже самое выходит
29 ноя 11, 15:58    [11678743]     Ответить | Цитировать Сообщить модератору
 Re: сортировка в представлении  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
Azomorph,

Можно ли отсортировать результаты во вью?
29 ноя 11, 16:13    [11678831]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить