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$
Mostrar la cita
etc.
Mostrar la cita
el
Mostrar la cita
#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$
Mostrar la cita
etc.
Mostrar la cita
el
Mostrar la cita
#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 :)
Mostrar la cita
numero, pero puede ser
Mostrar la cita
esta consulta solo
Mostrar la cita
todavia mas facil:
Mostrar la cita
tabla con los numeros
Mostrar la cita
sobre los numeros no
Mostrar la cita
columna llamada
Mostrar la cita
columna
Mostrar la cita
interesa obtener los
Mostrar la cita
utilizados.
Mostrar la cita
valores:
Mostrar la cita
valores: 998, 995,
Mostrar la cita
utilizados hasta alcanzar
Mostrar la cita
Ads by Google
Search Busqueda sugerida