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

Откуда:
Сообщений: 8
Форумчане, помогите пожалуйста, что-то совсем не соображу. Есть таблица из двух столбцов: (name, rep)

name rep
rTM 6
rMC 2

Меня интересуют только первые 2 записи - если в первой строке значение в столбце rep больше, чем во второй строке, то следует выполнить [определенное действие 1], иначе - [определенное действие 2].
В приведенном примере должно выполняться [определенное действие 1]

Подскажите пожалуйста, как выполнить подобное сравнение
29 май 12, 17:07    [12633252]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
ilyaBS
Member

Откуда: Киев
Сообщений: 77
frost262,

а как понять, какая строка первая, а какая вторая? в таблице есть ID или какой-то другой признак последовательности?
29 май 12, 17:11    [12633279]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
frost262
Member

Откуда:
Сообщений: 8
ilyaBS, строки упорядочены по полю rep по убыванию, т.е. первые 2 строки - с максимальными значениями
29 май 12, 17:14    [12633300]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
frost262, что-то в этом духе
+

declare @t table ( name varchar(10), rep int ) ;
insert  into @t
        ( name, rep )
values  ( 'rTM', 6 )
,       ( 'rMC', 5 )
--,       ( 'rMCxx', 6 )
,       ( 'rMC111', 4 ) ;
with  zz
        as ( select *
                  , row_number() over ( order by rep desc ) as rn
             from   @t
           )
  select  *
        , case when z.rep > z1.rep then '[определенное действие 1]'
               else '[определенное действие 2]'
          end as Doit
  from    zz z
  inner join zz z1 on z1.rn = 2
  where   z.rn = 1

29 май 12, 17:34    [12633393]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
frost262
Member

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

Спасибо, интересный способ. Сейчас буду копать
29 май 12, 17:55    [12633508]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
frost262,

а что вы подразумеваете под "выполнить [определенное действие]"?
29 май 12, 18:06    [12633550]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
frost262
Member

Откуда:
Сообщений: 8
Baddy, в данном случае - добавить строку в стороннюю таблицу с определенными значениями
29 май 12, 18:08    [12633562]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
frost262,

может быть тогда лучше так?
if (select top 1 COUNT (*) over (partition by rep) from [table] order by rep desc)=1
Action 1
else
Action 2
29 май 12, 18:41    [12633731]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
frost262
Member

Откуда:
Сообщений: 8
Baddy
frost262,

может быть тогда лучше так?
if (select top 1 COUNT (*) over (partition by rep) from [table] order by rep desc)=1
Action 1
else
Action 2=

Что-то не очень понимаю что здесь происходит, не объясните вкратце?


Я не совсем правильно объяснил. Помимо того что первая строка должна быть больше второй, значение поля name первой строки должно быть конкретным, тогда будет выполняться действие1.
Т.е.:
Если rep1 > rep2 И name1 = 'rTM', тогда действие1,
если rep1 = rep2 И name1 = 'rTM', тогда действие1,

если rep1 = rep2 И name1 <> 'rTM', тогда действие2,
если rep1 < rep2, тогда действие2
29 май 12, 19:03    [12633835]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
frost262,

а как может быть rep1 < rep2 если
автор
строки упорядочены по полю rep по убыванию, т.е. первые 2 строки - с максимальными значениями

и да, теперь постановка задачи несколько отличается от первоначальной)))
29 май 12, 19:10    [12633865]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
frost262
Member

Откуда:
Сообщений: 8
Baddy, они могут быть равны)
29 май 12, 19:17    [12633895]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
frost262
Baddy, они могут быть равны)


равны то они могут быть,но зачем вы тогда лишние "если" пишите?
и еще. если два rep равны, а на "действие" накладывается еще одно условие по Name, то как тогда все-таки отличить первую запись от второй?
имхо, вам просто необходимо Id прикручивать.
29 май 12, 19:39    [12633988]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
frost262
Member

Откуда:
Сообщений: 8
Baddy, да, прикрутил row_number() и сделал "в лоб"
		
insert into #temp3 (Name1, rep1) select Name, rep from #temp2 where num = 1 
update #temp3 set name2= (select  Name from #temp2 where num = 2 ), rep2 = (select  rep from #temp2 where num = 2 )

if (((select top 1 rep1 from #temp3) >= (select top 1 rep2 from #temp3)) and ((select top 1 name1 from #temp3)= 'rTM'))
print ('+')
else
print ('-')


до чего-то более красивого пока не допер
29 май 12, 19:49    [12634006]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
Jaffar
Member

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

а просто в переменные выборку сделать нельзя?
и потом их значения сравнивать?

declare @Val1 varchar(32), @Val2 varchar(32)
select @Val1 = ......
select @Val2 = ......

IF(@Val1 >= @Val2) --- action 1
ELSE --- action 2
30 май 12, 09:38    [12635313]     Ответить | Цитировать Сообщить модератору
 Re: сравнение значений в двух строках  [new]
frost262
Member

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

Да, можно и так, я просто думал обойтись как-нибудь без прикрутки счетчика, но столкнулся с проблемой, что не знаю как обратиться ко второй строке. То есть к первой например - select top 1... а к какой-либо другой - не знаюfr
31 май 12, 09:20    [12641348]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить