Como efectuar una consulta que me retorne los numeros no consecutivos de una consulta.

16/08/2004 - 21:15 por Enric Guinovart | Informe spam
Hola; tengo que efectuar una consulta que me informe sobre los numeros no
consecutivos de una columna. Me explico; tengo una columna llamada
NumeroAlbaran en TablaAlbaranes y en otra tabla la columna
'ContadorUltimoAlbaran' en tabla 'Contadores) me interesa obtener los
NúmeroAlbaran (tabla Albaranes) que no hayan sido utilizados.

P.E.

El contador de Albaranes tiene el valor 1000

En la tabla Albaranes columna 'NumeroAlbaran' tengo los valores:

1000
999
997
996
994
..
..

Para este supuesto la consulta me debe devolver los valores: 998, 995, etc.
etc. es decir todos los números que no han sido utilizados hasta alcanzar el
valor que tengo en 'ContadorUltimoAlbaran'

¿Como puedo efectuar una consulta de este tipo?


Muchas gracias
Enric
ege@tinet.fut.es

Preguntas similare

Leer las respuestas

#1 Luis Tarzia
16/08/2004 - 21:29 | Informe spam
Podrias usar un cursor pero si no primero tendrias que llenar una temporal
con los numeros
declare @contador int
declare @total int
set @contador = 1
select @total = ultimo albaran from la tabla de albaranes
create table #tmp1 (campo int)
while @contador <=@total
begin
insert into #tmp1 values (@contador)
end
select * from #tmp1 where camo not in (select numeroalbaran from tabla)

"Enric Guinovart" wrote in message
news:MR7Uc.97297$
Hola; tengo que efectuar una consulta que me informe sobre los numeros no
consecutivos de una columna. Me explico; tengo una columna llamada
NumeroAlbaran en TablaAlbaranes y en otra tabla la columna
'ContadorUltimoAlbaran' en tabla 'Contadores) me interesa obtener los
NúmeroAlbaran (tabla Albaranes) que no hayan sido utilizados.

P.E.

El contador de Albaranes tiene el valor 1000

En la tabla Albaranes columna 'NumeroAlbaran' tengo los valores:

1000
999
997
996
994
..
..

Para este supuesto la consulta me debe devolver los valores: 998, 995,


etc.
etc. es decir todos los números que no han sido utilizados hasta alcanzar


el
valor que tengo en 'ContadorUltimoAlbaran'

¿Como puedo efectuar una consulta de este tipo?


Muchas gracias
Enric



Respuesta Responder a este mensaje
#2 Javier Loria
16/08/2004 - 23:44 | Informe spam
Hola Enric:
Puedes hacer:
=SELECT B.NumeroAlbaran-1
FROM Albaranes AS A
RIGHT JOIN Albaranes AS B
ON A.NumeroAlbaran=B.NumeroAlbaran-1
WHERE A.NumeroAlbaran IS NULL
AND B.NumeroAlbaran>1
= Esto te dara todos los "inicios" de segmentos sin numero, pero puede ser
que exitan 2 albaranes no existentes consecutivos, en esta consulta solo
aparecera el primero.
Si tienes una Tabla de ayuda rellena de numeros es todavia mas facil:
=SELECT Numeros.Numero
FROM Albaranes
LEFT JOIN Numeros
ON Albaranes.NumeroAlbaran=Numeros.Numero
WHERE Albaranes.NumeroAlbaran IS NULL
= Esta solucion es rapidisima y muy simple, claro la tabla con los numeros
tiene que estar creada y rellena.
Saludos,

Javier Loria
Costa Rica
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
"Enric Guinovart" wrote in message
news:MR7Uc.97297$
Hola; tengo que efectuar una consulta que me informe sobre los numeros no
consecutivos de una columna. Me explico; tengo una columna llamada
NumeroAlbaran en TablaAlbaranes y en otra tabla la columna
'ContadorUltimoAlbaran' en tabla 'Contadores) me interesa obtener los
NúmeroAlbaran (tabla Albaranes) que no hayan sido utilizados.

P.E.

El contador de Albaranes tiene el valor 1000

En la tabla Albaranes columna 'NumeroAlbaran' tengo los valores:

1000
999
997
996
994
..
..

Para este supuesto la consulta me debe devolver los valores: 998, 995,


etc.
etc. es decir todos los números que no han sido utilizados hasta alcanzar


el
valor que tengo en 'ContadorUltimoAlbaran'

¿Como puedo efectuar una consulta de este tipo?


Muchas gracias
Enric



Respuesta Responder a este mensaje
#3 ulises
17/08/2004 - 00:29 | Informe spam
Concuerdo con Javier que lo mejor es definitivamente una
tabla de numeros que sirva de ayuda, pero en todo caso
haciendo un ejercicio y dada la tabla

select * from TablaAlbaran

NumeroAlbaran CampoAdicional
1 A
3 C
4 D
7 F
12 Z

(5 row(s) affected)

se pueden obtener los rangos faltantes con :

select ' De ' + Cast( tablainicial.numero+1 as varchar)
+ ' a ' + cast(tablafinal.numero-1 as varchar) as faltantes
from
(
select count(*)+ 1 as secuencia,
a.NumeroAlbaran as numero
from TablaAlbaran a JOIN TablaAlbaran b
on ( a.NumeroAlbaran >= b.NumeroAlbaran )
group by a.NumeroAlbaran
) tablainicial
join
(
select count(*) as secuencia,
a.NumeroAlbaran as numero
from TablaAlbaran a JOIN TablaAlbaran b
on ( a.NumeroAlbaran >= b.NumeroAlbaran )
group by a.NumeroAlbaran
) tablafinal
on tablainicial.secuencia = tablafinal.secuencia
where tablainicial.numero+1 <= tablafinal.numero-1
order by tablafinal.secuencia

faltantes
De 2 a 2
De 5 a 6
De 8 a 11

(3 row(s) affected)

Saludos,
Ulises
PD. Creo que se podría mejorar pero ando corto de tiempo :)
Hola Enric:
Puedes hacer:
=>SELECT B.NumeroAlbaran-1
FROM Albaranes AS A
RIGHT JOIN Albaranes AS B
ON A.NumeroAlbaran=B.NumeroAlbaran-1
WHERE A.NumeroAlbaran IS NULL
AND B.NumeroAlbaran>1
=> Esto te dara todos los "inicios" de segmentos sin


numero, pero puede ser
que exitan 2 albaranes no existentes consecutivos, en


esta consulta solo
aparecera el primero.
Si tienes una Tabla de ayuda rellena de numeros es


todavia mas facil:
=>SELECT Numeros.Numero
FROM Albaranes
LEFT JOIN Numeros
ON Albaranes.NumeroAlbaran=Numeros.Numero
WHERE Albaranes.NumeroAlbaran IS NULL
=> Esta solucion es rapidisima y muy simple, claro la


tabla con los numeros
tiene que estar creada y rellena.
Saludos,

Javier Loria
Costa Rica
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
"Enric Guinovart" wrote in message
news:MR7Uc.97297$
Hola; tengo que efectuar una consulta que me informe




sobre los numeros no
consecutivos de una columna. Me explico; tengo una




columna llamada
NumeroAlbaran en TablaAlbaranes y en otra tabla la




columna
'ContadorUltimoAlbaran' en tabla 'Contadores) me




interesa obtener los
NúmeroAlbaran (tabla Albaranes) que no hayan sido




utilizados.

P.E.

El contador de Albaranes tiene el valor 1000

En la tabla Albaranes columna 'NumeroAlbaran' tengo los




valores:

1000
999
997
996
994
..
..

Para este supuesto la consulta me debe devolver los




valores: 998, 995,
etc.
etc. es decir todos los números que no han sido




utilizados hasta alcanzar
el
valor que tengo en 'ContadorUltimoAlbaran'

¿Como puedo efectuar una consulta de este tipo?


Muchas gracias
Enric







.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida