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

Откуда:
Сообщений: 2231
Прошу помощи в коде.

Тестовый код:

 create table #test (f1 int)
go

insert into #test 
select 1
union 
select 2
union 
select null
union all
select null

go

select 
f1,
cast(ROW_NUMBER ( ) OVER ( Order by #test.f1 ) as Int)
as nOrder
from #test 

go

drop table #test


Необходимо упорядочить по полю f1, что бы записи шли следующим образом:

f1 nOrder
1 1
2 2
null 3
null 4
1 сен 16, 10:58    [19616112]     Ответить | Цитировать Сообщить модератору
 Re: Построить Order  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
ORDER BY 1/0
1 сен 16, 11:06    [19616149]     Ответить | Цитировать Сообщить модератору
 Re: Построить Order  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SELECT *
FROM #test
ORDER BY CASE WHEN f1 IS NOT NULL THEN 0 END DESC, f1;
1 сен 16, 11:09    [19616169]     Ответить | Цитировать Сообщить модератору
 Re: Построить Order  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @t TABLE (f1 INT)
INSERT INTO @t
VALUES (1),(2),(NULL),(NULL)

SELECT *
     , ROW_NUMBER() OVER (ORDER BY 1/0)
     --, ROW_NUMBER() OVER (ORDER BY (SELECT 1))
FROM @t
1 сен 16, 11:09    [19616171]     Ответить | Цитировать Сообщить модератору
 Re: Построить Order  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1454
AlanDenton,

будет работать в зависимости от последовательности операций вставки.

при insert select union select выдает результат:
NULL 1
1 2
2 3
NULL 4

select %%lockres%%, f1 from #test

1:433:0; NULL;
1:433:1; 1;
1:433:2; 2;
1:433:3; NULL;


select %%lockres%%, f1 from @t


4:338:0; 1;
4:338:1; 2;
4:338:2; NULL;
4:338:3; NULL;
1 сен 16, 11:27    [19616295]     Ответить | Цитировать Сообщить модератору
 Re: Построить Order  [new]
PaulWist
Member

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

У меня для:

-) таблевара, получается нужный результат
-) временной таблички нужный результат не получается

create table #test (f1 int)
go

insert into #test 
select 1
union 
select 2
union 
select null
union all
select null

go

select 
f1,
ROW_NUMBER() OVER (ORDER BY 1/0)
as nOrder
from #test 

go

drop table #test


Выбирается вот так:
f1 nOrder
NULL 1
1 2
2 3
NULL 4
1 сен 16, 11:29    [19616306]     Ответить | Цитировать Сообщить модератору
 Re: Построить Order  [new]
PaulWist
Member

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

ОК, вроде корректно, сенькс:

create table #test (f1 int)
go

insert into #test 
select 1
union 
select 2
union 
select null
union all
select null

go

select 
f1,
ROW_NUMBER() OVER (ORDER BY CASE WHEN f1 IS NOT NULL THEN 0 END DESC, f1)
as nOrder
from #test 

go

drop table #test


Результат:

f1 nOrder
1 1
2 2
NULL 3
NULL 4
1 сен 16, 11:31    [19616324]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить