Como puedo efectuar una consulta que me devuelva los valores no utilizados.

18/09/2004 - 20:47 por Enric Guinovart | Informe spam
Hola; tengo una tabla en la que existe un campo contador que en principio
tiene que tener valores consecutivos para cada registro (p.e. un número de
albarán); alguien me podria indicar como puedo efectuar una select que me
devuelva los valores no numericos no asignados a ningun registro. P.e. en
este campo tengo los valores 1, 3, 5, 7, entonces la consulta me debe
devolver los numeros que faltan = 2, 4, 6



Muchas gracias
Enric

Preguntas similare

Leer las respuestas

#1 Maximiliano D. A.
19/09/2004 - 05:11 | Informe spam
Hola, yo armaria una tabla aparte con todos los valores posibles reales y
luego haria un left join contra esta para saber los faltantes.

"Enric Guinovart" escribió en el mensaje
news:vx%2d.137144$
Hola; tengo una tabla en la que existe un campo contador que en principio
tiene que tener valores consecutivos para cada registro (p.e. un número de
albarán); alguien me podria indicar como puedo efectuar una select que me
devuelva los valores no numericos no asignados a ningun registro. P.e. en
este campo tengo los valores 1, 3, 5, 7, entonces la consulta me debe
devolver los numeros que faltan = 2, 4, 6



Muchas gracias
Enric


Respuesta Responder a este mensaje
#2 Javier Loria
20/09/2004 - 02:58 | Informe spam
Hola:
Te copio un extracto de un correo viejo:
Si tuvieras una Tabla de Ayuda con todos los numeros consecutivos de 1 a
64000 seria muy facil:
/* Codigo Simple */
SELECT Numero
FROM Facturas LEFT JOIN Numeros ON
FacturaNum=Numero
WHERE FacturaNum IS NULL
/* Fin de Codigo Simple*/

Esta tabla es relativamente pequena solo ocupa 128 Kb. y hace la vida muy
facil. En caso que no puedas tener hacerlo porque son mucho mas filas puedes
pensar en algo como:

/* Inicio de Codigo */
-
-
SELECT Minimo, MIN(Maximo) AS Maximo
INTO #Diferencias
FROM (
SELECT F1.NumFactura+1 AS Minimo
FROM Facturas F1 LEFT JOIN Facturas F2 ON
F1.NumFacturaò.Numfactura-1
WHERE F2.Numfactura IS NULL AND
F1.NumFactura<(SELECT MAX(NumFactura) FROM Facturas)
) AS Minimos JOIN (
SELECT F1.NumFactura-1 as Maximo
FROM Facturas F1 LEFT JOIN Facturas F2 ON
F1.NumFacturaò.Numfactura+1
WHERE F2.Numfactura IS NULL AND
F1.NumFactura>1) AS Maximos
ON Minimos.Minimo<=Maximos.Maximo
GROUP BY Minimo
-
-
CREATE TABLE #Numeros(
Numero INT PRIMARY KEY NOT NULL
) -- En SQL 2000 podria remplazarse con una variable TABLE

DECLARE @I INTEGER
DECLARE @MaxDif INTEGER
SET @I=0

SELECT @MaxDif=MAX(Maximo-Minimo)
FROM #Diferencias
WHILE @I<@MaxDif+1
BEGIN
INSERT #Numeros
VALUES(@I)
SET @I=@I+1
END

-
-
SELECT Dif.Minimo+Num.Numero
FROM #DIFERENCIAS AS Dif
JOIN #NUMEROS AS Num
ON Dif.Minimo+Num.Numero<=Dif.Maximo

-
-
DROP TABLE #Diferencias
DROP TABLE #Numeros

/* Fin de Codigo */
Espero te sirva


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:vx%2d.137144$
Hola; tengo una tabla en la que existe un campo contador que en principio
tiene que tener valores consecutivos para cada registro (p.e. un número de
albarán); alguien me podria indicar como puedo efectuar una select que me
devuelva los valores no numericos no asignados a ningun registro. P.e. en
este campo tengo los valores 1, 3, 5, 7, entonces la consulta me debe
devolver los numeros que faltan = 2, 4, 6



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