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:
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
Respuesta Responder a este mensaje
#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:#
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:
> 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


Respuesta Responder a este mensaje
#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:
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:#
> 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:
> > 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
>
>


Respuesta Responder a este mensaje
#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:
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:
> 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:#
> > 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:
> > > 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
> >
> >
>
>


Respuesta Responder a este mensaje
#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:#
¿Los últimos cuatro son siempre números?, por que si es así, puedes


adaptar
la solución que te propone javier.


=> SALVA A SQL,
MATA UN CURSOR

Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.
Brigada Anti-Cursores
==>
"Edmundo J. Davila" escribió en el mensaje
news:%
> 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:
> > 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:
> > > 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:#
> > > > 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:
> > > > > 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
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida