Помогите с запросом?

AlexPiv

Имеется таблица, необходимо отобрать те строки, если до 1 стоит 0, тогда вывести ту троку где стоит 1Т.е результат 6 и 3 строкаcreate table #t (id_c int identity, nom int)1 insert into #t(nom) values(1)2 insert into #t(nom) values(0)3 insert into #t(nom) values(1)4 insert into #t(nom) values(0)5 insert into #t(nom) values(0)6 insert into #t(nom) values(1)Я пытался но не могу догнатьselect *from #twhere nom =case ((select nom from #t where id_c=id_c+1)=1 )and (nom=0 )then id_c=id_c+1 end
5 ответов

AlexPiv

Вот так
select *
from #t
where id_c in (select ID_c from #t Where nom = <b>1</b> and id_c-<b>1</b> not in (select ID_c from #t Where nom = <b>1</b>))
code SQL for food


AlexPiv

SELECT t1.id_c, t2.id_c, t1.nom, t2.nom
FROM #t t1
		LEFT JOIN #t t2
			ON t1.id_c = t2.id_c + <b>1</b>
WHERE t1.nom = <b>1</b> AND t2.nom = <b>0</b>


AlexPiv

В принципе и с INNER JOIN тоже работает, чего-то я ступил :0)Главное тут надо учесть, что поле identity не прерывается, т.е. строки из таблицы не удаляются, а то результат может быть не правильный!!!


AlexPiv

create table #t (id_c int identity, nom int)
 insert into #t(nom) values(<b>1</b>)
 insert into #t(nom) values(<b>0</b>)
 insert into #t(nom) values(<b>1</b>)
 insert into #t(nom) values(<b>0</b>)
 insert into #t(nom) values(<b>0</b>)
 insert into #t(nom) values(<b>1</b>)

select * from #t

select t2.* from #t t1
join	#t t2 on t1.id_c + <b>1</b> = t2.id_c
where t1.nom = <b>0</b> and t2.nom = <b>1</b>


AlexPiv

[quot mccc][src]Спасибо работает