SQL Consecutivos !!!

18/08/2003 - 17:01 por Edmundo J. Davila | Informe spam
Hola amigos,

Necesito su valiosa colaboracion en el siguiente problema. Debo hacer una
vista o una consulta SQL (SELECT) que
me extraiga el numero de documento de un campo varchar de SQL 2000 de la
forma XX-999999, tres caracteres y seis
numeros y que me ponga una marca cuando se pierda el consecutivo, por
ejemplo:

P10-00001
P10-00002
P10-00003
**P10-00005
P10-00006
P10-00007
**P10-00009
**P10-00011
P10-00012
P10-00013

De antemano agradezco cualquier ayuda que puedan darme.

Atentamente,

Edmundo J. Davila

Preguntas similare

Leer las respuestas

#1 Javier Loria\(MVP\)
18/08/2003 - 19:59 | Informe spam
Hola:
No te sirvio el codigo que te envie anteriormente?
Hola Edmundo:
Es mas facil si pones el codigo de creacion de las Tablas, pero debe ser
algo como:
/* Codigo de Creacion de Tablas */
CREATE TABLE Documentos (
NumeroDocumento VARCHAR(9) NOT NULL PRIMARY KEY,
CONSTRAINT CK_NumDocumento
CHECK (NumeroDocumento LIKE '[A-Z][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9]')
)
/* Insert de Ejemplo */
INSERT Documentos
VALUES('P10-00001')
INSERT Documentos
VALUES('P10-00002')
INSERT Documentos
VALUES('P10-00003')
INSERT Documentos
VALUES('P10-00005')
INSERT Documentos
VALUES('P10-00006')
INSERT Documentos
VALUES('P10-00007')
INSERT Documentos
VALUES('P10-00009')
INSERT Documentos
VALUES('P10-00011')
INSERT Documentos
VALUES('P10-00012')
INSERT Documentos
VALUES('P10-00013')

/* Consulta */
SELECT CASE
WHEN (A.NumDoc<>1) AND
(B.NumDoc IS NULL) THEN '**'
ELSE ''
END+NumeroDocumento as Documento
FROM (SELECT CONVERT(INT,RIGHT(NumeroDocumento,5))
AS NumDoc,
NumeroDocumento
FROM DOCUMENTOS ) AS A
LEFT JOIN (SELECT CONVERT(INT,RIGHT(NumeroDocumento,5))
AS NumDoc,
FROM DOCUMENTOS) AS B
ON
A.NumDoc=B.NumDoc+1
/* Fin de Consulta */

Espero que te sirva. Una nota adicional es que probablemente quieres cambiar
el VARCHAR(9) por un CHAR(9) que es mas eficiente.
==

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Edmundo J. Davila escribio:
Mostrar la cita
#2 Edmundo J. Davila
18/08/2003 - 22:06 | Informe spam
Javier,

Muchas gracias por tu ayuda. Que pasaria si quisiera hacer el control del
consecutivo de un campo varchar cualquier, que no necesariamente fuera de la
forma XX-999999 sino que llevara letras y numeros en cualquier lugar.

Saludos y muchas gracias por tu ayuda.

Edmundo J. Davila

"Javier Loria(MVP)" escribió en el mensaje
news:#
Mostrar la cita
ser
Mostrar la cita
cambiar
Mostrar la cita
#3 Miguel Egea
19/08/2003 - 11:57 | Informe spam
Edmunto, el principal problema de lo que planteas es que no sabemos cual
sería el siguiente de
'ABCJ2323A32', si tienes una regla para esto, quizá podamos hacer algo.

Saludos
Miguel Egea
"Edmundo J. Davila" escribió en el mensaje
news:
Mostrar la cita
la
Mostrar la cita
'[A-Z][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9]')
Mostrar la cita
#4 Edmundo J. Davila
19/08/2003 - 17:10 | Informe spam
Miguel,

Lo que sucede es que se usan talonarios de facturas o series por vendedor,
por ejemplo, puede haber un vendedor que usa el

AB00025
AB00026
AB00027
AB00028

como puedes ver aqui no hay guiones, puede haber otro que use 01A0001,
01A0002, 01A000n... este sistema de papeleria y control ya estaba
establecido en la empresa, ahora se pretende estandarizar y una de las
formas es la que envie anteriormente XX-999999, dos letras con un guion y
seis numeros. Sin embargo, por el momento desean poder controlar los
consecutivos de la documentacion que ya existe. Este es el problema.

Si el campo fuera numerico, la solucion seria muy simple, ya que solo
bastaria comprobar si el registro n+1 es igual al registro al registro n mas
una unidad { (n)+1 }, si esto es falso, entonces en la vista (o algun
SELECT) podria indicarle que al campo le agregue algun caracter que permita
a las personas que revisan, percatarse de que hubo un salto en el
consecutivo. Es algo asi como un algoritmo generico para controlar saltos
de consecutivos en campos alfanumericos (yo se que no es nada sencillo).

Agradezco mucho sus comentarios e interes sobre el asunto.

Atentamente,

Edmundo J. Davila


"Miguel Egea" escribió en el mensaje
news:
Mostrar la cita
del
Mostrar la cita
de
Mostrar la cita
debe
Mostrar la cita
de
Mostrar la cita
por
Mostrar la cita
#5 Edmundo J. Davila
19/08/2003 - 18:20 | Informe spam
Ya los revice y generalmente las letras van al inicio, los ultimos digitos
siempre son numeros, pero no necesariamente los ultimos cuatro, puede ser en
algunos casos los ultimos 4, los ultimos 5, 6, hasta 7 segun lo que estuve
viendo en la BD.

Saludos,

Edmundo

"Miguel Egea" escribió en el mensaje
news:#
Mostrar la cita
adaptar
Mostrar la cita
vendedor,
Mostrar la cita
y
Mostrar la cita
saltos
Mostrar la cita
cual
Mostrar la cita
algo.
Mostrar la cita
control
Mostrar la cita
fuera
Mostrar la cita
lugar.
Mostrar la cita
pero
Mostrar la cita
quieres
Mostrar la cita
2000
Mostrar la cita
consecutivo,
Mostrar la cita
Ads by Google
Search Busqueda sugerida