Inquiridor
Sql curssor

Pergunta
-
Boa noite a todos os membros tenho uma stored procedure que passo a mencionar a baixo, o que ela faz?
Ela devolve o numero AE que é numero de veiculos reservados para um tipo de frota numa determinada data, o AE=Aentrega e AR= Arecolha
ou seja conta os veiculos que existem reservados naquela datainicioreserva , agora pretendia no AR contar os veiculos em q a datafimreserva é essa mesma, passo a mostrar a SP e a imagem do que essa stored procedure devolve:
--exec ReportEntragasPorDiaCom2TipoFrota '2013-01-01' , '2013-12-21' ALTER procedure [dbo].[ReportEntragasPorDiaCom2TipoFrota] @datainicioreserva varchar(255), @datafimreserva varchar (255) as select convert (varchar(10), a.datainicioreserva,105) as datainicioreserva , convert (varchar(10), a.datafimreserva,105) as datafimreservaA, COUNT (a.idReserva) as cntAE, COUNT (a.idReserva) as cntAR, --b convert (varchar(10), a.datafimreserva,105) as datafimreservaB, COUNT (a.idReserva) as cntBE, COUNT (a.idReserva) as cntBR --h into #reservasF from reserva a inner join tipoFrota b on a.idTipoFrota = b.idTipoFrota group by a.datainicioreserva, a.datafimreserva, b.idTipoFrota,b.descTipoFrota delete from #reservasF --set identity_insert users on declare @idTipoFrota varchar (100) declare @descTipoFrota varchar (100) declare @cnt1 varchar (100) declare @cnt2 varchar (100) select distinct convert (varchar(10), a.datainicioreserva,20) as datainicioreserva , convert (time, a.datainicioreserva ) as horainicio, convert (varchar(10), a.datafimreserva,105) as datafimreserva, convert (time, a.datafimreserva ) as horafimreserva, b.idTipoFrota,b.descTipoFrota, COUNT (a.idReserva) as cnt1, COUNT (a.idReserva) as cnt2 into #reserva from reserva a inner join tipoFrota b on a.idTipoFrota = b.idTipoFrota where ((a.datainicioreserva > = @datainicioreserva or @datainicioreserva < = a.datafimreserva) and a.datainicioreserva< = @datafimreserva ) group by a.datainicioreserva, a.datafimreserva, b.idTipoFrota,b.descTipoFrota DECLARE ccursor CURSOR READ_ONLY FOR select distinct datainicioreserva, datafimreserva,idTipoFrota,cnt1, cnt2, descTipoFrota from #reserva OPEN ccursor FETCH NEXT FROM ccursor INTO @datainicioreserva,@datafimreserva,@idTipoFrota,@cnt1, @cnt2 ,@descTipoFrota WHILE @@FETCH_STATUS = 0 BEGIN if @descTipoFrota = 'A' begin if not exists (select * from #reservasF where datainicioreserva = @datainicioreserva ) begin insert into #reservasF (datainicioreserva,datafimreservaA,cntAE , cntAR ) select @datainicioreserva,@datafimreserva,@cnt1, @cnt2 from #reserva where datainicioreserva = @datainicioreserva and idTipoFrota = @idTipoFrota end else begin update #reservasF set datainicioreserva=@datainicioreserva, datafimreservaA=@datafimreserva,cntAE=@cnt1, cntAR =@cnt2 where datainicioreserva=@datainicioreserva end end if @descTipoFrota = 'b' begin if not exists (select * from #reservasF where datainicioreserva = @datainicioreserva ) begin insert into #reservasF (datainicioreserva,datafimreservab,cntBE, cntBR ) select @datainicioreserva,@datafimreserva,@cnt1, @cnt2 from #reserva where datainicioreserva = @datainicioreserva and idTipoFrota = @idTipoFrota end else begin update #reservasF set datainicioreserva=@datainicioreserva, datafimreservab=@datafimreserva,cntBE =@cnt1, cntBR = @cnt2 where datainicioreserva=@datainicioreserva end end FETCH NEXT FROM ccursor INTO @datainicioreserva,@datafimreserva,@idTipoFrota,@cnt1, @cnt2,@descTipoFrota end CLOSE ccursor DEALLOCATE ccursor select isnull(datainicioreserva,'') as datainicioreserva, isnull(datafimreservaA,'') as datafimreservaA, isnull(cntAE,'') as AE, isnull(cntAR,'') as AR, --isnull(datafimreservaB,'') as datafimreservaB, isnull(datafimreservaB,'') as datafimreservaB, isnull(cntBE,'') as BE, isnull(cntBr,'') as BR from #reservasF order by datainicioreserva asc
esta sp devolve estes dados:
e por exemplo a linha:
datainicio datafim AE AR
linha 1 2013-01-01 08-01-2013 1 0
depois entre a linha 2 e 3 devia aparecer a tal linha com o veicuolo que tem q recolher nesse dia ou seja deveria ficar
................ 04-01-2013 0 1 isto pq pq tem q entregar um dia 04-01-2013.
Fiz-me entender, agradecia ajuda desde ja o meu muito obrigado Helder Pires
Helder
Todas as Respostas
-
Helder
Não entendi sua dúvida, poderia montar um select maior com o resultado atual de sua proc e montar uma previa de como vc gostaria que fosse o resultado da query?
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS, MCITP, MCT.
Se útil, classifique!!!
Me siga no twitter: @marcelodba