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

Откуда: Волжский
Сообщений: 235
Есть тестовые таблицы и представление. В представлении не работает сортировка. Что я делаю не так?
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
Express Edition on Windows NT 5.1 (Build 2600: Service Pack 2)

CREATE TABLE [dbo].[Дома](
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[Наименование] [nvarchar](50) COLLATE Cyrillic_General_CI_AS NULL,
 CONSTRAINT [PK_Дома] PRIMARY KEY CLUSTERED 
(
	[Код] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[Домики](
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[Наименование] [nvarchar](50) COLLATE Cyrillic_General_CI_AS NULL,
 CONSTRAINT [PK_Домики] PRIMARY KEY CLUSTERED 
(
	[Код] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[Подъезды](
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[Наименование] [nvarchar](50) COLLATE Cyrillic_General_CI_AS NULL,
 CONSTRAINT [PK_Подъезды] PRIMARY KEY CLUSTERED 
(
	[Код] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[ПодъездыВдомах](
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[Дом] [int] NULL,
	[Подъезд] [int] NULL,
 CONSTRAINT [PK_ПодъездыВдомах] PRIMARY KEY CLUSTERED 
(
	[Код] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[ПодъездыВдомиках](
	[Код] [int] IDENTITY(1,1) NOT NULL,
	[Дом] [int] NULL,
	[Подъезд] [int] NULL,
 CONSTRAINT [PK_ПодъездыВдомиках] PRIMARY KEY CLUSTERED 
(
	[Код] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE VIEW [dbo].[Представление1]
AS
SELECT      TOP 100 PERCENT dbo.ПодъездыВдомах.Дом, dbo.ПодъездыВдомах.Подъезд
FROM          dbo.ПодъездыВдомах INNER JOIN
                        dbo.Подъезды ON dbo.ПодъездыВдомах.Подъезд = dbo.Подъезды.Код
UNION ALL
SELECT      TOP 100 PERCENT dbo.ПодъездыВдомиках.Дом, dbo.ПодъездыВдомиках.Подъезд
FROM          dbo.ПодъездыВдомиках INNER JOIN
                        dbo.Подъезды ON dbo.ПодъездыВдомиках.Подъезд = dbo.Подъезды.Код
ORDER BY dbo.Подъезды.Наименование

GO
8 июн 09, 19:51    [7278334]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
А это нигде и не гарантируется. Единственная гарантия сортировки -- order by в запросе.

ЗЫ SP3 бы уже поставили...
8 июн 09, 19:54    [7278338]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
Arsave
Member

Откуда: Волжский
Сообщений: 235
Ray D, в каком именно запросе?
8 июн 09, 19:59    [7278350]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Arsave
Что я делаю не так?
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
Express Edition on Windows NT 5.1 (Build 2600: Service Pack 2)

CREATE VIEW [dbo].[Представление1]
AS
SELECT      TOP 100 PERCENT dbo.ПодъездыВдомах.Дом, dbo.ПодъездыВдомах.Подъезд
FROM          dbo.ПодъездыВдомах INNER JOIN
                        dbo.Подъезды ON dbo.ПодъездыВдомах.Подъезд = dbo.Подъезды.Код
UNION ALL
SELECT      TOP 100 PERCENT dbo.ПодъездыВдомиках.Дом, dbo.ПодъездыВдомиках.Подъезд
FROM          dbo.ПодъездыВдомиках INNER JOIN
                        dbo.Подъезды ON dbo.ПодъездыВдомиках.Подъезд = dbo.Подъезды.Код
ORDER BY dbo.Подъезды.Наименование
Надо отказаться от попыток упорядочить резалтсет внутри представления,
а ORDER BY применять во внешнем SELECTе из этого представления.
TOP 100 PERCENT .... ORDER BY .... игнорируется сервером, начиная с 9-й версии (Compatible Level>=90).
8 июн 09, 20:05    [7278369]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
В запросе к view.

BOL, Sorting Rows with ORDER BY:

ORDER BY guarantees a sorted result only for the outermost SELECT statement of a query. For example, consider the following view definition:
...
8 июн 09, 20:06    [7278372]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
Arsave
Member

Откуда: Волжский
Сообщений: 235
Блин, похоже тест не отражает реальной ситуации ((
Так на вскидку не подскажете, где может быть проблема?
Вот такое вот UNION представление:
SELECT      dbo.[ДеталиВзаказ-модулях].Деталь
FROM          dbo.[ДеталиВзаказ-модулях] INNER JOIN
                        dbo.МодулиВзаказах ON dbo.[ДеталиВзаказ-модулях].МодульВзаказе = dbo.МодулиВзаказах.Код
UNION ALL
SELECT      dbo.[ДеталиВзаказ-модуль-фасадах].Деталь
FROM          dbo.МодулиВзаказах INNER JOIN
                        dbo.[ФасадыВзаказ-модулях] ON dbo.МодулиВзаказах.Код = dbo.[ФасадыВзаказ-модулях].МодульВзаказе INNER JOIN
                        dbo.[ДеталиВзаказ-модуль-фасадах] ON dbo.[ФасадыВзаказ-модулях].Код = dbo.[ДеталиВзаказ-модуль-фасадах].ФасадВмодулеВзаказе

и вот такое сортирующее:
SELECT      TOP 100 PERCENT dbo.ДеталировкаМодуля.Деталь, dbo.Детали.Наименование
FROM          dbo.ДеталировкаМодуля INNER JOIN
                        dbo.Детали ON dbo.ДеталировкаМодуля.Деталь = dbo.Детали.Код
ORDER BY dbo.Детали.Наименование
Сортировка не происходит.
8 июн 09, 20:51    [7278470]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
вы ответы читаете?
8 июн 09, 21:23    [7278519]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
Arsave
Member

Откуда: Волжский
Сообщений: 235
Блин, похоже тест не отражает реальной ситуации ((
Так на вскидку не подскажете, где может быть проблема?
Вот такое вот UNION представление:
SELECT      dbo.[ДеталиВзаказ-модулях].Деталь
FROM          dbo.[ДеталиВзаказ-модулях] INNER JOIN
                        dbo.МодулиВзаказах ON dbo.[ДеталиВзаказ-модулях].МодульВзаказе = dbo.МодулиВзаказах.Код
UNION ALL
SELECT      dbo.[ДеталиВзаказ-модуль-фасадах].Деталь
FROM          dbo.МодулиВзаказах INNER JOIN
                        dbo.[ФасадыВзаказ-модулях] ON dbo.МодулиВзаказах.Код = dbo.[ФасадыВзаказ-модулях].МодульВзаказе INNER JOIN
                        dbo.[ДеталиВзаказ-модуль-фасадах] ON dbo.[ФасадыВзаказ-модулях].Код = dbo.[ДеталиВзаказ-модуль-фасадах].ФасадВмодулеВзаказе

и вот такое сортирующее:
SELECT      TOP 100 PERCENT dbo.ДеталировкаМодуля.Деталь, dbo.Детали.Наименование
FROM          dbo.ДеталировкаМодуля INNER JOIN
                        dbo.Детали ON dbo.ДеталировкаМодуля.Деталь = dbo.Детали.Код
ORDER BY dbo.Детали.Наименование
Сортировка не происходит.
8 июн 09, 22:18    [7278594]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
Arsave
Member

Откуда: Волжский
Сообщений: 235
Так, предыдущее сообщение не читаем, оно случайно продублировалось
Забыл уточнить, dbo.ДеталировкаМодуля - это название первого UNION представления, т.е. второе представление должно осуществлять сортировку по результату первого. Вроде сделал как и советовали, но не работает..
8 июн 09, 22:21    [7278601]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
iljy
Guest
Arsave,
сделайте скрипты, создающие таблицы, представление, пример данных, запрос, и его вывод, который вам не нравится. иначе разговор безпредметный получается.
8 июн 09, 22:41    [7278630]     Ответить | Цитировать Сообщить модератору
 Re: Как отсортировать UNION по полю связанной таблицы  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Arsave
Так, предыдущее сообщение не читаем, оно случайно продублировалось
Забыл уточнить, dbo.ДеталировкаМодуля - это название первого UNION представления, т.е. второе представление должно осуществлять сортировку по результату первого. Вроде сделал как и советовали, но не работает..

Что советовали? Советовали не использовать order by во view! Читайте уже ответы.
8 июн 09, 22:51    [7278644]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить