SQL - Agregar numero cuando cambia campo

 
Vista:

Agregar numero cuando cambia campo

Publicado por Link (3 intervenciones) el 26/07/2011 17:57:47
Hola, tengo un pequeño problema en un proyecto de la escuela q ando haciendo, se trata de esto:

en un procedimiento almacenado, voy pasando una variable que va incrementando cada ciertos archivos, lo voy a poner asi:

IdEnvio IdPartida
1020 1
1020 2
1020 3
1021 4
1021 5
1022 6

lo que quiero es q cada q cambie el IdEnvio, se reinicie el IdPartida y me quede algo asi:

IdEnvio IdPartida
1020 1
1020 2
1020 3
1021 1
1021 2
1022 1

Trate con ponerle 1 While, Loop, y hasta con una comparacion, pero no me queda, alguien me podria ayudar?, gracias de antemano....
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Agregar numero cuando cambia campo

Publicado por leonardo_josue (1173 intervenciones) el 26/07/2011 18:51:51
Hola Link:

No entendí qué es lo que necesitas hacer, creo que te refieres a hacer una consulta (select) sobre una o más tablas y agregar una columna donde se vayan numerando los registros, correcto???. No das muchas información acerca de tus tablas, tampoco mencionas qué manejador de BD estás utilizando lo que complica mucho tratar de ayudarte. podrías investigar acerca de FUNCIONES ANALÍTICAS, en particular ROW_NUMBER(), esta está soportada por SQL Server y Oracle y hace justamente lo que expresas en tu segundo ejemplo, es decir agrupa los registros por algún campo y va numerando las apariciones, en cuanto cambia el valor del campo por el que se está agrupando reinicia la cuenta.

Aquí hay algunas ligas para que veas cómo funciona en SQL Server y ORACLE:

http://msmvps.com/blogs/martinpoon/archive/2006/09/21/SQL-Server-2005-ranking-functions-_2D00_-ROW_5F00_NUMBER_28002900_.aspx

http://www.epidataconsulting.com/tikiwiki/tiki-read_article.php?articleId=64

Ahora bien, no todos los Manejadores tienen esta funcionalidad, pero la mayoría implementa algunas alternativas para poder simularlo, sería cuestión de que investigues cómo sería la implementación con el DBMS que utilizas.

Saludos
Leo.
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

Agregar numero cuando cambia campo

Publicado por Link (3 intervenciones) el 26/07/2011 18:59:15
Ok va de nuevo, este es el procedimieno completo, esta dentro de un paquete el cual mando a llamar desde Visual Studio con C#

PROCEDURE insertarDetEnvio (pIdEnvio IN NUMBER, pIdModulo IN NUMBER, pNombreModulo IN VARCHAR2, pIdEmpresa IN NUMBER)--Exepciones
AS
vExisteModulo NUMBER(1);
vArchivoNoEcontrado VARCHAR2(60) := 'El nombre del archivo no se encuentra en la tabla modulos';
vArchivoMultiplicado VARCHAR2(60) := 'El archivo se encuentra 2 o mas veces en la tabla modulos';
v_partida NUMBER(3);
BEGIN
SELECT count(modu.idmodulo)
INTO vExisteModulo
FROM modulos modu, sistemas sis, proyectos pro, empresas em
WHERE upper(modu.archivo) = upper(pNombreModulo)
AND modu.idsistema = sis.idsistema
AND sis.idproyecto = pro.idproyecto
AND pro.nombre LIKE 'SIIP%'
AND pro.idempresa = em.idempresa
AND em.idempresa = pIdEmpresa;

SELECT nvl(max(denv.partida),0)+1
INTO v_partida
FROM detenvios denv;

IF(vExisteModulo = 0) THEN
INSERT INTO enviosexcepciones (idenvio, archivo, nota)
VALUES (pIdEnvio, pNombreModulo, vArchivoNoEcontrado);
ELSIF (vExisteModulo = 1) THEN
INSERT INTO detenvios(idEnvio, partida, idmodulo)
VALUES (pIdEnvio, v_partida,pIdModulo);
ELSIF (vExisteModulo >= 2) THEN
INSERT INTO enviosexcepciones (idenvio, archivo, nota)
VALUES (pIdEnvio, pNombreModulo, vArchivoMultiplicado);
END IF;

END insertarDetEnvio;


Lo que quiero es q cuando se inserte en la tabla detenvios, que la partida se valla incrementando, mientras el IdEnvio sea el mismo, en cuanto cambie que se vuelva a "reiniciar" y empieze de nuevo en 1, me explique ahora si????
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