Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 возможна ли сортировка по совокупности?  [new]
ю
Guest
можно ли, имея вот такие данные:
declare @t table (a int, b int)
insert into @t values (1,2)
insert into @t values (3,4)
insert into @t values (2,1)
insert into @t values (3,5)

id a b
----------- -----------
1 1 2
2 3 4
3 2 1
4 3 5

получить на выходе вот такое?

id a b
----------- -----------
1 1 2
3 2 1
2 3 4
4 3 5

т.е. последующая строка больше равна предыдущей как по а, так и по b,
а если это не выполняется, то порядок неважен,
т.е. и вариант:

id a b
----------- -----------
3 2 1
1 1 2
2 3 4
4 3 5



тоже правильный.

когда вообще ни одна пара не больше никакой другой по совокупности, то не сортировать,
т.е. можно выдать в любом порядке
26 май 11, 15:36    [10713874]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
iljy
Member

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

так сделайте просто order by a,b, вашим требованиям результат удовлетворяет.
26 май 11, 15:38    [10713896]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
ю,

SELECT * FROM @t ORDER BY a*10+b
?
26 май 11, 15:40    [10713920]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
ю
Guest
может, у меня уже и маразм.
почему-то мне кажется, что можно так подобрать данные, что это не будет эквивалентной сортировкой.
вот просто из соображений, что в моей задаче не задан порядок а,b или b,а
и ведь результаты у
order by a,b
и
order by b,a
будут различные...
и что, мне оба варианта подходят?
как-то я сомневаюсь...
26 май 11, 15:46    [10714006]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
ю
Guest
предыдущий ответ был адресован iljy,
пока писала, вот и еще ответили.
лучше возьму вариант kDnZP, спасибо!
умножу только на что-то с побольше нулями :)
хотя и тут вопрос, кого из них умножать, а или b?
вроде опять сортировка будет эквивалентной по a,b или по b,a,
а вроде в моей задаче ну никак нет зависимости от порядка а,b или b,а....
26 май 11, 15:51    [10714047]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
iljy
Member

Откуда:
Сообщений: 8711
ю
может, у меня уже и маразм.
почему-то мне кажется, что можно так подобрать данные, что это не будет эквивалентной сортировкой.
вот просто из соображений, что в моей задаче не задан порядок а,b или b,а
и ведь результаты у
order by a,b
и
order by b,a
будут различные...
и что, мне оба варианта подходят?
как-то я сомневаюсь...

Да, по вашим критериям вам подходят оба варианта. Если один из параметров больше - запись будет позже. Если при этом второй тоже больше - значит все хорошо, если не больше - вы сказали, что вам все равно, в каком они будут порядке.

10*a+b даст вам ровно тот же самый порядок (с ограничениями на значения 0<=a<=9)
26 май 11, 15:57    [10714122]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
ю
Guest
ок, тогда обойдусь без умножения...
если потом вылезет неправильное, напишу сюда конкретные данные, где не то, спасибо!
26 май 11, 16:00    [10714149]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Печёнкой чую - тут в ORDER BY CASE WHEN THEN END подойдёт!
26 май 11, 16:03    [10714176]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
ю, может так?
select * from @t order by a+b, a

1 2
2 1
1 3
3 1
4 1
1 5
4 2
3 4
4 3
5 2
3 5

такой результат устраивает?
26 май 11, 16:04    [10714196]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
ю
Guest
сейчас буду все подряд пробовать,
начиная с обычной сортировки по a,b.
мне вот тоже почему-то лезет на ум
case
,
но за него возьмусь, если вылезут данные, где неправильно.
противно, что провеять надо глазками...
26 май 11, 16:23    [10714392]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
iljy
Member

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

не надо глазками. Если версия >=2005, то можно так:
;with cte as
(
	select *, ROW_NUMBER() over(order by a,b/*тестируемая сортировка*/) RN
	from @t
)
select * 
from cte t1 join cte t2 on t1.RN+1 = t2.RN
where нарушение условий сортировки
26 май 11, 16:29    [10714443]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Если решать "в лоб", то, конечно, получится
SET NOCOUNT ON;

declare @t table (a int, b int)
insert into @t values (1,2)
insert into @t values (3,4)
insert into @t values (2,1)
insert into @t values (3,5);

SELECT *
FROM @t T
ORDER BY (SELECT COUNT(*) FROM @t TT WHERE TT.a<=T.a AND TT.b<T.b OR TT.a<T.a AND TT.b<=T.b);
26 май 11, 16:51    [10714730]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Или проще?
SET NOCOUNT ON;

declare @t table (a int, b int)
insert into @t values (1,2)
insert into @t values (3,4)
insert into @t values (2,1)
insert into @t values (3,5);

SELECT *
FROM @t T
ORDER BY (SELECT COUNT(*) FROM @t TT WHERE TT.a<=T.a AND TT.b<=T.b);
26 май 11, 16:56    [10714793]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
ю
Guest
докладываю: хоть
order by a,b
, хоть
order by b,a
, все канает.
вроде даже я морально с этим согласилась.
меня убивало, что результат будет зависеть от порядка,
но он не то чтобы зависит: просто подходят оба варианта.
дают разные ответы, но подходят оба.
всем спасибо!
27 май 11, 13:33    [10719323]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
s.w.a.n.
Member

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


+
— Извините, а куда мы прилетели?
— Тс-с! У неё очень тонкие уши. Ты тентуру своей планеты знаешь?
— Тентуру?
— Ну, номер своей галактики в спирали скажи.
— В спирали?
— В спирали, в спирали...
("Кин-Дза-Дза")


Сообщение было отредактировано: 27 май 11, 14:57
27 май 11, 14:10    [10719685]     Ответить | Цитировать Сообщить модератору
 Re: возможна ли сортировка по совокупности?  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
ИМХО, самый верный вариант решения (с учетом формулировки задания) предложил, конечно iap
27 май 11, 15:10    [10720390]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить