SQL - Ayuda con SP

 
Vista:

Ayuda con SP

Publicado por GERMAN MARCANO (6 intervenciones) el 19/09/2008 14:45:08
Quiero realizar un conteo vehicular, tengo una tabla donde almaceno la matricula del vehiculo, el periodo de tiempo (intervalos de 15 minutos) y la zona (donde estaba estacionado el vehiculo), entonces quiero contar y acumular las matriculas que aparecen en el periodo 1 y se repiten en los siguientes periodos esto con el fin de verificar cuanto tiempo permanecen estacionados. Tengo este SP a ver si consiguen algun error porq solo me cuenta la primera ocurrencia y luego termina la ejecucion.

ALTER PROCEDURE [dbo].[Conteos_Estacionamiento_5]
AS
DECLARE @PLACA VARCHAR(8)
DECLARE @PLACA_T VARCHAR(8)
DECLARE @PERIODO INT
DECLARE @CUENTA INT

DECLARE REGISTRO CURSOR STATIC FOR
SELECT NRO_PLACA FROM DBO.PLACAS_5 WHERE PERIODO=1
OPEN REGISTRO
FETCH NEXT FROM REGISTRO
INTO @PLACA
SELECT @PLACA

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT @PERIODO=PERIODO FROM PLACAS_5 WHERE NRO_PLACA=@PLACA AND PERIODO<>1
WHILE @PERIODO IS NULL
BREAK
BEGIN
SET @CUENTA=@CUENTA+1
END
UPDATE DBO.CUENTA_5 SET
CANTIDAD = @CUENTA WHERE PERIODO = @PERIODO


FETCH NEXT FROM REGISTRO
INTO @PLACA
SET @CUENTA=0
END

CLOSE REGISTRO
DEALLOCATE REGISTRO

Por favor AYUDEN!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con SP

Publicado por edu (36 intervenciones) el 19/09/2008 16:19:19
Quite el SELECT @PLACA y cambie algunas cosas.
Te has dado cuenta si tu consulta del cursor devuelve registros?

ALTER PROCEDURE [dbo].[Conteos_Estacionamiento_5]
AS
DECLARE @PLACA VARCHAR(8)
DECLARE @PLACA_T VARCHAR(8)
DECLARE @PERIODO INT
DECLARE @CUENTA INT

DECLARE REGISTRO CURSOR STATIC FOR
SELECT NRO_PLACA FROM DBO.PLACAS_5 WHERE PERIODO=1
OPEN REGISTRO
FETCH NEXT FROM REGISTRO
INTO @PLACA

WHILE @@FETCH_STATUS = 0
BEGIN

SELECT @PERIODO=ISNULL(PERIODO,0) FROM PLACAS_5 WHERE NRO_PLACA=@PLACA AND PERIODO<>1

IF @PERIODO<>0 BEGIN
SET @CUENTA=@CUENTA+1
END
UPDATE DBO.CUENTA_5 SET
CANTIDAD = @CUENTA WHERE PERIODO = @PERIODO

FETCH NEXT FROM REGISTRO
INTO @PLACA
SET @CUENTA=0
END

CLOSE REGISTRO
DEALLOCATE REGISTRO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por German Marcano (6 intervenciones) el 19/09/2008 16:28:32
Si el cursor devuelve un valor pero solo uno cuando deberia devolver todas las matriculas que esten en el Periodo 1 cierto?? dejame probar con lo que colocaste
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por edu (36 intervenciones) el 19/09/2008 16:42:57
Sabes q, mejor pon los campos de tu tabla PLACA y explica bien lo que quiere hacer, ya que me he dado cuenta que estás haciendo algo mal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por GERMAN MARCANO (6 intervenciones) el 19/09/2008 16:49:34
TENGO DOS TABLAS "PLACA": (NRO_PLACA, PERIODO,ZONA) Y "CUENTA": (PERIODO,CANTIDAD)

QUIERO HACER LO QUE ANTERIORMENTE EXPLIQUE Y GUARDAR LA CUENTA DE CADA PERIODO EN CUENTA.CANTIDAD ME CAPTAS MAS O MENOS??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por edu (36 intervenciones) el 19/09/2008 17:18:16
Creo que lo puedes hacer sin el cursos con una sola instrucción, pero siguiendo tu cursor, entonces sería así,

ALTER PROCEDURE [dbo].[Conteos_Estacionamiento_5]
AS
DECLARE @PLACA VARCHAR(8)
DECLARE @PLACA_T VARCHAR(8)
DECLARE @PERIODO INT
DECLARE @CUENTA INT
DECLARE @CANT_PLACA INT

DELETE FROM DBO.CUENTA

DECLARE REGISTRO CURSOR STATIC FOR
SELECT SUM(NRO_PLACA),PERIODO FROM DBO.PLACAS_5 GROUP BY PERIODO
OPEN REGISTRO
FETCH NEXT FROM REGISTRO
INTO @CANT_PLACA,@PERIODO

WHILE @@FETCH_STATUS = 0
BEGIN

INSERT INTO DBO.CUENTA (PERIODO,CANTIDAD)
VALUES (@PERIODO,@CANT_PLACA)

FETCH NEXT FROM REGISTRO
INTO @PLACA,@PERIODO

END

CLOSE REGISTRO
DEALLOCATE REGISTRO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por GERMAN (1 intervención) el 19/09/2008 17:32:33
Creo que no me entendiste edu o me explique mal, no veo donde estas realizando la comparación de la matricula q deberia estar en mi cursor con las de los siguientes periodos??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por edu (36 intervenciones) el 19/09/2008 19:22:55
Pero para que quieres contar y hacer eso en el cursor, cuando en la MISMA tabla tienes el dato,
es decir, tienes PLACA y PERIODO en la tabla PLACA_5 para que vuelves a consultar la misma tabla dentro del cursor?? cuando lo puedes hacer con un GROUP BY y un COUNT tal y como te puse en el ejemplo.
Yo entiendo que tu resultado es saber CUANTOS placas o autos se estacionaron en cada periodo!!
Eso es lo que vas a lograr con la consulta
Tienes:

T_PLACA
nroplaca: XXX
periodo:1

nroplaca:XXX
periodo:2

nroplaca:XXX
periodo:1

Entonces:
En tu tabla Cuenta tendrías:

T_CUENTA
periodo cantidad
1 2
2 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por German (6 intervenciones) el 19/09/2008 19:54:17
NOOO edu ojala y fuese asi de facil, la cuestion es tomar una placa del periodo 1 y verificar si se repite en los demas periodo, si es positiva la condicion sumar 1 en la tabla Cuenta_5 en su respectivo periodo, disculpa por haberme explicado mal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por German (6 intervenciones) el 19/09/2008 20:06:36
Te coloco el codigo con el que medio he avanzado pero el rollo es que el cursor no quiere avanzar no se porque!!!

BANDERA es un incremental que estoy utilizando para desplazarme dentro de la tabla con el cursor.

Que tendra de malo!! me tiene verde ya esta jodida

ALTER PROCEDURE [dbo].[Conteos_Estacionamiento_PRUEBA]
AS
DECLARE @PLACA VARCHAR(8)
DECLARE @PLACA_T VARCHAR(8)
DECLARE @PERIODO INT
DECLARE @CUENTA INT
DECLARE @MEDICION INT

DECLARE REGISTRO CURSOR STATIC FOR
SELECT BANDERA FROM DBO.PLACAS_5
OPEN REGISTRO
FETCH NEXT FROM REGISTRO
INTO @MEDICION
SELECT @MEDICION //Para ver que me esta devolviendo la variable en la corrida
SET @CUENTA=0
SELECT @PLACA=NRO_PLACA FROM PLACAS_5 WHERE BANDERA=@MEDICION
SELECT @PLACA
WHILE @@FETCH_STATUS=0
BEGIN

SELECT @PLACA_T=NRO_PLACA FROM PLACAS_5 WHERE BANDERA=@MEDICION+1
SELECT @PLACA_T
IF @PLACA=@PLACA_T
BEGIN
SET @CUENTA=@CUENTA+1
SELECT @PERIODO=PERIODO FROM PLACAS_5 WHERE NRO_PLACA=@PLACA_T
END
SELECT @CUENTA

UPDATE DBO.CUENTA_5 SET
CANTIDAD = @CUENTA WHERE PERIODO = @PERIODO
FETCH NEXT FROM REGISTRO
INTO @MEDICION


END

CLOSE REGISTRO
DEALLOCATE REGISTRO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con SP

Publicado por German Marcano (6 intervenciones) el 22/09/2008 14:45:02
EDUUUU por favor sigueme ayudando!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar