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

Откуда:
Сообщений: 93
Есть таблица типа:
if exists (select * from tempdb.dbo.sysobjects where id = object_id('tempdb..#abc')) drop table #abc
CREATE TABLE #abc(ID int, name varchar (10))
INSERT #abc (id,name) VALUES (1, 'z')
INSERT #abc (id,name) VALUES (2, 'd')
INSERT #abc (id,name) VALUES (3, 'a')
INSERT #abc (id,name) VALUES (4, 'c')
INSERT #abc (id,name) VALUES (5, 'b')
INSERT #abc (id,name) VALUES (6, 'y')
SELECT * FROM #abc ORDER BY name

как вывести вверх списка известные заранее записи скажем с ID=1 и 6 сохраняя сортировку по полю name в таком виде?

DELETE FROM #abc
INSERT #abc (id,name) VALUES (6, 'y')
INSERT #abc (id,name) VALUES (1, 'z')
INSERT #abc (id,name) VALUES (3, 'a')
INSERT #abc (id,name) VALUES (5, 'b')
INSERT #abc (id,name) VALUES (4, 'c')
INSERT #abc (id,name) VALUES (2, 'd')

SELECT * FROM #abc
P.S. желательно что бы не слишком ресурсная получилась конструкция с учетом большого количества записей в таблице.
2 ноя 12, 10:05    [13412503]     Ответить | Цитировать Сообщить модератору
 Re: Как переместить часть записей в запросе вверх списка?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, как-то так, например
declare @abc table(id int, name varchar (10))

insert @abc (id,name) values (1, 'z')
insert @abc (id,name) values (2, 'd')
insert @abc (id,name) values (3, 'a')
insert @abc (id,name) values (4, 'c')
insert @abc (id,name) values (5, 'b')
insert @abc (id,name) values (6, 'y')

select * from @abc order by name


select
	*
from @abc
order by case when (id = 1 or id = 6) then 0 - id
			else id
			end
2 ноя 12, 10:11    [13412539]     Ответить | Цитировать Сообщить модератору
 Re: Как переместить часть записей в запросе вверх списка?  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
SELECT * FROM #abc ORDER BY ISNULL(-SIGN(NULLIF(NULLIF(ID,1),6)),ID) DESC, name;
2 ноя 12, 10:13    [13412551]     Ответить | Цитировать Сообщить модератору
 Re: Как переместить часть записей в запросе вверх списка?  [new]
Garisson
Member

Откуда:
Сообщений: 93
tpg
Ну, как-то так, например
declare @abc table(id int, name varchar (10))

insert @abc (id,name) values (1, 'z')
insert @abc (id,name) values (2, 'd')
insert @abc (id,name) values (3, 'a')
insert @abc (id,name) values (4, 'c')
insert @abc (id,name) values (5, 'b')
insert @abc (id,name) values (6, 'y')

select * from @abc order by name


select
	*
from @abc
order by case when (id = 1 or id = 6) then 0 - id
			else id
			end

спасибо, но сортировка не по name получилась а по ID, но мысль мне ясна, позволил себе немного доработать:

SELECT *
from @abc
order by case when (id = 1 or id = 6) then '_' + name
else name
end
2 ноя 12, 10:25    [13412607]     Ответить | Цитировать Сообщить модератору
 Re: Как переместить часть записей в запросе вверх списка?  [new]
Garisson
Member

Откуда:
Сообщений: 93
iap, спасибо то же вариант хороший
2 ноя 12, 10:26    [13412612]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить