Buscar numeros

08/10/2009 - 16:48 por julio | Informe spam
Hola Grupo, como puedo hacer un query a un campo que contenga numero del 1
al 9 y saber cuales no estan

tabla prueba

Numero
1
5
6
7


resultado
2
3
4
8
9

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
08/10/2009 - 16:59 | Informe spam
Por ejemplo:

*********************************************************************

create table #n (numero int)

insert #n
select 1 union select 5 union select 6 union select 7

select f.*
from (select top 9 row_number() over (order by name) rn from sys.objects) f
left join #n n on f.rn = n.numero
where n.numero is null

*********************************************************************

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"julio" wrote in message
news:%
Hola Grupo, como puedo hacer un query a un campo que contenga numero del 1
al 9 y saber cuales no estan

tabla prueba

Numero
1
5
6
7


resultado
2
3
4
8
9


Respuesta Responder a este mensaje
#2 Alejandro Mesa
08/10/2009 - 17:16 | Informe spam
Julio,

Una forma facil es usando una tabla auxiliar de #s. Esta tabla es bien util
para resolver distinctos tipo de problemas en T-SQL.

create table dbo.Numero(Numero int not null constraint pk_Numeros primary
key clustered with (fillfactor0));
GO
WITH
L0 AS (SELECT 1 AS n UNION ALL SELECT 1),
L1 AS (SELECT 1 AS n FROM L0 AS A CROSS JOIN L0 AS B),
L2 AS (SELECT 1 AS n FROM L1 AS A CROSS JOIN L1 AS B),
L3 AS (SELECT 1 AS n FROM L2 AS A CROSS JOIN L2 AS B),
L4 AS (SELECT 1 AS n FROM L3 AS A CROSS JOIN L3 AS B),
Num AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) AS n FROM L4)
INSERT INTO dbo.Numero(Numero)
SELECT n
FROM Num
WHERE n < 1001;
GO
DECLARE @t TABLE (Numero int NOT NULL unique);

INSERT INTO @t VALUES(1);
INSERT INTO @t VALUES(5);
INSERT INTO @t VALUES(6);
INSERT INTO @t VALUES(7);

SELECT Numero FROM dbo.Numero WHERE Numero < 10
EXCEPT
SELECT Numero FROM @t;
GO
DROP TABLE dbo.Numero;
GO

No tienes por que eleiminar la tabla de #s en tu db. Esta tabla no ocupa
mucho espacio y es muy util. Si te es suficiente con un millon de filas,
entonces usa 1000001 en vez de 1001.



AMB



"julio" wrote:

Hola Grupo, como puedo hacer un query a un campo que contenga numero del 1
al 9 y saber cuales no estan

tabla prueba

Numero
1
5
6
7


resultado
2
3
4
8
9



Respuesta Responder a este mensaje
#3 julio
08/10/2009 - 17:21 | Informe spam
Muchas gracias, funciona a la perfeccion
"Carlos Sacristan" wrote in message
news:%
Por ejemplo:

*********************************************************************

create table #n (numero int)

insert #n
select 1 union select 5 union select 6 union select 7

select f.*
from (select top 9 row_number() over (order by name) rn from sys.objects)
f
left join #n n on f.rn = n.numero
where n.numero is null

*********************************************************************

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"julio" wrote in message
news:%
Hola Grupo, como puedo hacer un query a un campo que contenga numero del
1 al 9 y saber cuales no estan

tabla prueba

Numero
1
5
6
7


resultado
2
3
4
8
9





Respuesta Responder a este mensaje
#4 julio
08/10/2009 - 18:14 | Informe spam
Gracias Alejandro muy interesante
"Alejandro Mesa" wrote in message
news:
Julio,

Una forma facil es usando una tabla auxiliar de #s. Esta tabla es bien
util
para resolver distinctos tipo de problemas en T-SQL.

create table dbo.Numero(Numero int not null constraint pk_Numeros primary
key clustered with (fillfactor0));
GO
WITH
L0 AS (SELECT 1 AS n UNION ALL SELECT 1),
L1 AS (SELECT 1 AS n FROM L0 AS A CROSS JOIN L0 AS B),
L2 AS (SELECT 1 AS n FROM L1 AS A CROSS JOIN L1 AS B),
L3 AS (SELECT 1 AS n FROM L2 AS A CROSS JOIN L2 AS B),
L4 AS (SELECT 1 AS n FROM L3 AS A CROSS JOIN L3 AS B),
Num AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) AS n FROM L4)
INSERT INTO dbo.Numero(Numero)
SELECT n
FROM Num
WHERE n < 1001;
GO
DECLARE @t TABLE (Numero int NOT NULL unique);

INSERT INTO @t VALUES(1);
INSERT INTO @t VALUES(5);
INSERT INTO @t VALUES(6);
INSERT INTO @t VALUES(7);

SELECT Numero FROM dbo.Numero WHERE Numero < 10
EXCEPT
SELECT Numero FROM @t;
GO
DROP TABLE dbo.Numero;
GO

No tienes por que eleiminar la tabla de #s en tu db. Esta tabla no ocupa
mucho espacio y es muy util. Si te es suficiente con un millon de filas,
entonces usa 1000001 en vez de 1001.



AMB



"julio" wrote:

Hola Grupo, como puedo hacer un query a un campo que contenga numero del
1
al 9 y saber cuales no estan

tabla prueba

Numero
1
5
6
7


resultado
2
3
4
8
9



Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
08/10/2009 - 20:33 | Informe spam
Hola Julio,

On 8 okt, 18:14, "julio" wrote:
Gracias Alejandro muy interesante




Hola Julio,

Creo que esta reacción no es necesaria, pero dada tu pregunta
no estoy muy seguro.

No te dejes confundir por la complejidad de los ejemplos.
La esencia es que tienes que tener dos conjuntos (dos tablas)
y hayar la diferencia.

declare @A table(Numero int);
declare @B table(Numero int);

insert @A values (1);
insert @A values (2);
insert @A values (3);
insert @A values (4);
insert @A values (5);
insert @A values (6);
insert @A values (7);
insert @A values (8);
insert @A values (9);

insert @B values (1);
insert @B values (5);
insert @B values (6);
insert @B values (7);

select Numero from @A
except
select Numero from @B

Los 'trucos' que exiben Carlos y Alejandro para construir
la tabla @A de forma genérica podrían encubrir la idea
de fondo. Eso es todo.

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