update intercalado
é o seguinte eu tenho um select assim
preciso varrer o resultado deste select usando um cursor para isso, só que dentro do loop preciso pegar o codEscola e dar um update em um campo, mas preciso fazer isso da seguinte forma:
suponha que eu tenha neste select 4 registros retornados conforme ordem de campos no select acima
1 2
2 5
3 7
4 10
agora preciso pegar o primeiro registro e dar um update (1,2) em seguida preciso pular para o ultimo registro(4,10) e dar outro update em seguida volto para o segundo rgistro(2,5) depois vou para o penultimo registro (3,7) e dou um update e assim por diante ....
select a.codEscola, count(*) as qtd from escolas a inner join alunos b on (a.codEscola = b.CodEscola) group by a.codEscola order by qtd
preciso varrer o resultado deste select usando um cursor para isso, só que dentro do loop preciso pegar o codEscola e dar um update em um campo, mas preciso fazer isso da seguinte forma:
suponha que eu tenha neste select 4 registros retornados conforme ordem de campos no select acima
1 2
2 5
3 7
4 10
agora preciso pegar o primeiro registro e dar um update (1,2) em seguida preciso pular para o ultimo registro(4,10) e dar outro update em seguida volto para o segundo rgistro(2,5) depois vou para o penultimo registro (3,7) e dou um update e assim por diante ....
Joao Moreira
Curtidas 0
Respostas
Marco Pinheiro
21/02/2012
Olá Joao,
A sequencia de UPDATEs deve ser essa? Primeiro, quarto, segundo e terceiro?
Demonstre como você quer com um exemplo real. Como seria este update, o que será afetado?
Att.,
Marco.
A sequencia de UPDATEs deve ser essa? Primeiro, quarto, segundo e terceiro?
Demonstre como você quer com um exemplo real. Como seria este update, o que será afetado?
Att.,
Marco.
GOSTEI 0
Joao Moreira
21/02/2012
é mais ou menos assim nesse loop ai preciso dar os update naquela ordem que eu citei acima
na primeira linha depois na ultima, na segunda linha depois na penultima, na terceira linha depois na antepenultima a assim vai....
na primeira linha depois na ultima, na segunda linha depois na penultima, na terceira linha depois na antepenultima a assim vai....
declare cur_escolas cursor fast_forward for select a.estabelecimento, COUNT(*) as qtd from estabelecimento a inner join alunos b on (a.estabelecimento = b.id_escola) --where a.VENCIMENTO is null group by a.estabelecimento declare @codEscola int declare @qtd int = 0 declare @qtdInc int = 0 declare @dia int = 1 declare @sCods varchar(max) = declare @strSQL varchar(max) = open cur_escolas fetch next from cur_escolas into @codEscola,@qtd while (@@fetch_status != -1) begin set @qtdInc = @qtdInc + @qtd set @sCods = @sCods + CONVERT(varchar(10),@codEscola) + , if @qtdInc >= 28000 begin print convert(varchar(5),@dia) set @sCods = (+@sCods+SUBSTRING(@sCods,1,LEN(@sCods)-1)+) print @sCods set @strSQL = update ESTABELECIMENTO set VENCIMENTO = + Convert(varchar(5),@dia) + where estabelecimento in + @sCods execute(@strSQL) set @qtdInc = 0 set @sCods = set @dia = @dia + 1 end fetch next from cur_escolas into @codEscola, @qtd end close cur_escolas deallocate cur_escolas
GOSTEI 0
Joao Moreira
21/02/2012
ops ficou ruim...
é mais ou menos assim nesse loop ai preciso dar os update naquela ordem que eu citei acima
na primeira linha depois na ultima, na segunda linha depois na penultima, na terceira linha depois na antepenultima a assim vai....
declare cur_escolas cursor fast_forward for select a.estabelecimento, COUNT(*) as qtd from estabelecimento a
inner join alunos b on (a.estabelecimento = b.id_escola) --where a.VENCIMENTO is null
group by a.estabelecimento
declare @codEscola int
declare @qtd int = 0
declare @qtdInc int = 0
declare @dia int = 1
declare @sCods varchar(max) =
declare @strSQL varchar(max) =
open cur_escolas
fetch next from cur_escolas into @codEscola,@qtd
while (@@fetch_status != -1)
begin
set @qtdInc = @qtdInc + @qtd
set @sCods = @sCods + CONVERT(varchar(10),@codEscola) + ,
if @qtdInc >= 28000
begin
print convert(varchar(5),@dia)
set @sCods = (+@sCods+SUBSTRING(@sCods,1,LEN(@sCods)-1)+)
print @sCods
set @strSQL = update ESTABELECIMENTO set VENCIMENTO = + Convert(varchar(5),@dia) +
where estabelecimento in + @sCods
execute(@strSQL)
set @qtdInc = 0
set @sCods =
set @dia = @dia + 1
end
fetch next from cur_escolas into @codEscola, @qtd
end
close cur_escolas
deallocate cur_escolas
é mais ou menos assim nesse loop ai preciso dar os update naquela ordem que eu citei acima
na primeira linha depois na ultima, na segunda linha depois na penultima, na terceira linha depois na antepenultima a assim vai....
declare cur_escolas cursor fast_forward for select a.estabelecimento, COUNT(*) as qtd from estabelecimento a
inner join alunos b on (a.estabelecimento = b.id_escola) --where a.VENCIMENTO is null
group by a.estabelecimento
declare @codEscola int
declare @qtd int = 0
declare @qtdInc int = 0
declare @dia int = 1
declare @sCods varchar(max) =
declare @strSQL varchar(max) =
open cur_escolas
fetch next from cur_escolas into @codEscola,@qtd
while (@@fetch_status != -1)
begin
set @qtdInc = @qtdInc + @qtd
set @sCods = @sCods + CONVERT(varchar(10),@codEscola) + ,
if @qtdInc >= 28000
begin
print convert(varchar(5),@dia)
set @sCods = (+@sCods+SUBSTRING(@sCods,1,LEN(@sCods)-1)+)
print @sCods
set @strSQL = update ESTABELECIMENTO set VENCIMENTO = + Convert(varchar(5),@dia) +
where estabelecimento in + @sCods
execute(@strSQL)
set @qtdInc = 0
set @sCods =
set @dia = @dia + 1
end
fetch next from cur_escolas into @codEscola, @qtd
end
close cur_escolas
deallocate cur_escolas
GOSTEI 0