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

Откуда:
Сообщений: 14
Есть таблица с числовым полем N, необходимо добавить вычисляемое булевое поле - С, значение которого меняется если N следующей записи изменился. Пример:
C N
1 1
0 2
1 3
1 3
0 4
Подскажите как это реализовать, или в какую сторону копать.
17 июн 04, 10:54    [747241]     Ответить | Цитировать Сообщить модератору
 Re: SQL Запрос  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
А где упорядочивающий признак?
т.е. как определить какая запись следующая?

ИМХО - надо еще ключик ввести
17 июн 04, 10:57    [747250]     Ответить | Цитировать Сообщить модератору
 Re: SQL Запрос  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Сделайте самоджоин таблицы, чтобы в результате в одной строке оказались "предыдущее N" и "следующее N" и тогда уже nextN-oldN даст вам 0, если значение не изменилось.

Но вначале, конечно, придется определиться с тем, что етсь "порядок", т.е. см. пост paparome
17 июн 04, 11:02    [747273]     Ответить | Цитировать Сообщить модератору
 Re: SQL Запрос  [new]
Сегей
Member

Откуда:
Сообщений: 14
Извеняюсь за неполноту вопроса, порядок - ORDER BY N

To Berg: Если не сложно поясните как организовать самоджоин с таким сдвигом.
17 июн 04, 11:22    [747357]     Ответить | Цитировать Сообщить модератору
 Re: SQL Запрос  [new]
paparome
Member

Откуда: Москва
Сообщений: 4312
create table #tbl (N int)
insert into #tbl
select 1 
union all
select 1 
union all
select 2 
union all
select 3 
union all
select 3 
union all
select 5 
union all
select 6 

select x1.n, x2.x
from
#tbl x1 inner join
(select t1.n, (count(t2.n) & 1) as x
from (select n from #tbl group by n) t1 inner join
(select n from #tbl group by n) t2
on t1.n >= t2.n
group by t1.n) x2
on x1.n = x2.n
order by x1.n

drop table #tbl
17 июн 04, 11:34    [747397]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить