[resolvido]SQL SERVER Cursores

1 resposta
L

Boa tarde. No código abaixo, o cursor está funcionando. Eu já tentei alterar ele várias vezes pra fazer a função que desejo que é a seguinte:
Ao percorrer o cursor, ao invés de imprimir todos os pilotos que tiraram 1 lugar (inclusive repetindo os mesmos nomes que já foram campeões mais de uma vez), queria que ele imprimisse 1 vez a pessoa e com um contador de vitórias

declare teste
cursor for
	select  c.NomeCircuito , p.NomePiloto , pos.Data
	from Circuito c, Piloto P, PosPilotoProva pos 
	where c.codCircuito = pos.codcircuito and pos.CodPiloto = p.CodPiloto and pos.Posicao = 1
declare @nome_circuito varchar(10), @nome_piloto varchar(10), @data datetime

open teste

fetch next from teste
into @nome_circuito,@nome_piloto,@data
WHILE @@FETCH_STATUS = 0
BEGIN
	PRINT @nome_piloto + ' ' + @nome_circuito + ' ' + Convert(varchar(10), @data, 101)

	fetch next from teste
	into @nome_circuito,@nome_piloto,@data
END

	CLOSE teste
	DEALLOCATE teste

O Sistema de tabelas é a seguinte:
[img]https://sites.google.com/site/dlspat23/imagens/ER.jpg[/img]

Obrigado pela atenção :D

1 Resposta

L

Pessoal, obrigado pela atenção mas consegui resolver com o seguinte código:

DECLARE
    @NomePiloto nvarchar(50),
    @circuito nvarchar(50),
    @data datetime,
    @conta int,
    @NomeAnterior nvarchar(50)

Declare vitorias_cursor cursor for
    Select  P.NomePiloto, Po.Data, C.NomeCircuito
    FROM    PosPilotoProva Po join Piloto P on P.CodPiloto = PO.CodPiloto join Circuito C on c.codCircuito = Po.CodCircuito
    Where Posicao = 1
    Order by NomePiloto
-- Com todos os pilotos vitoriosos ordenados por nome, a tarefa
-- de contar quantas vezes seus nomes aparecem repetidos fica facilitada
OPEN vitorias_cursor
FETCH NEXT FROM vitorias_cursor INTO @NomePiloto, @Data, @circuito   
set @NomeAnterior = @NomePiloto   
set @conta = 1
PRINT 'Piloto: ' + @NomePiloto                                                                               
WHILE @@FETCH_STATUS = 0
BEGIN
    if @nomeAnterior = @NomePiloto
    begin
          set @conta = @conta + 1
    end
    else
    begin
          PRINT '  Total de vitorias:' + cast(@conta as nvarchar)
          PRINT 'Piloto: ' + @NomePiloto         
          set @conta = 1
    end
    PRINT '  ' + cast(@Data as nvarchar) + '  ' + @circuito
    set @nomeAnterior = @NomePiloto
    FETCH NEXT FROM vitorias_cursor INTO @NomePiloto, @Data, @circuito
   
END
PRINT '  Total de vitorias:' + cast(@conta as nvarchar)
CLOSE vitorias_cursor
DEALLOCATE vitorias_cursor
Criado 18 de abril de 2010
Ultima resposta 18 de abr. de 2010
Respostas 1
Participantes 1