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

Откуда:
Сообщений: 166
Есть товары, объединенные в группы. Хотелось бы чтобы порядок отображения групп мог задавать я сам
SELECT     goods.tovar, goods.type
FROM         goods
WHERE goods.type='матрац'
GROUP BY goods.tovar, goods.type
UNION
SELECT     goods.tovar, goods.type
FROM         goods
WHERE goods.type='наматрасник'
GROUP BY goods.tovar, goods.type
UNION
SELECT     goods.tovar, goods.type
FROM         goods
WHERE goods.type='чехол'
GROUP BY goods.tovar, goods.type
UNION
SELECT     goods.tovar, goods.type
FROM         goods
WHERE goods.type='подушка'
GROUP BY goods.tovar, goods.type

вот хотелось бы чтобы порядок групп был такой, в какой последовательность идут селекты. А в итоге у меня сейчас идет сортировка по tovar, если добавля сортировку по type, то она будет алфавитной, а мне хотелось бы именно заданной мною последовательности. Есть такая возможность?
9 июн 09, 11:04    [7279637]     Ответить | Цитировать Сообщить модератору
 Re: нестандартная пользовательская сортировка  [new]
MoRoZoFF
Member

Откуда:
Сообщений: 166
да, SQL 2005
9 июн 09, 11:05    [7279646]     Ответить | Цитировать Сообщить модератору
 Re: нестандартная пользовательская сортировка  [new]
Crimean
Member

Откуда:
Сообщений: 13148
введите свое поле, по нему и сортируйте. заполнять по вкусу..
хотя п вычисляемое

order by
case goods.type
when 'матрац' then 8
when 'наматрасник' then 2
...
else null
end
9 июн 09, 11:07    [7279658]     Ответить | Цитировать Сообщить модератору
 Re: нестандартная пользовательская сортировка  [new]
MoRoZoFF
Member

Откуда:
Сообщений: 166
да, спасибо. меня тоже посетила такая мысль. вот моя реализация

SELECT     goods.tovar, goods.type, 1 as ord
FROM         goods
WHERE goods.type='матрац'
GROUP BY goods.tovar, goods.type
UNION
SELECT     goods.tovar, goods.type, 2 as ord
FROM         goods
WHERE goods.type='наматрасник'
GROUP BY goods.tovar, goods.type
UNION
SELECT     goods.tovar, goods.type, 3 as ord
FROM         goods
WHERE goods.type='чехол'
GROUP BY goods.tovar, goods.type
UNION
SELECT     goods.tovar, goods.type, 4 as ord
FROM         goods
WHERE goods.type='подушка'
GROUP BY goods.tovar, goods.type
ORDER BY ord
9 июн 09, 11:11    [7279692]     Ответить | Цитировать Сообщить модератору
 Re: нестандартная пользовательская сортировка  [new]
Crimean
Member

Откуда:
Сообщений: 13148
вместо "union" в вашем случае лучше писать "union all"
вам все равно, а серверу приятно будет - работы меньше
9 июн 09, 11:19    [7279742]     Ответить | Цитировать Сообщить модератору
 Re: нестандартная пользовательская сортировка  [new]
Gerros
Member

Откуда: Харьков
Сообщений: 501
create table SortOrder(
  report varchar( 10),
  sort int,
  type varchar( 10)
)

insert SortOrder values( 'report1', 1, 'матрац')
insert SortOrder values( 'report1', 2, 'наматрасник')
insert SortOrder values( 'report1', 3, 'чехол')
insert SortOrder values( 'report1', 4, 'подушка')

select
  g.tovar,
  g.type
from goods g
join SortOrder so on
  so.report = 'report1'
  and
  so.type = g.type
order by
  so.sort,
  g.tovar
9 июн 09, 13:25    [7280576]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить