Visual Basic Foro

Programación => Bases de Datos => Mensaje iniciado por: cobein en Octubre 01, 2013, 11:24:34 am

Título: temita con CROSS APPLY
Publicado por: cobein en Octubre 01, 2013, 11:24:34 am
Consulta hay alguna manera de quitar la tabla del from en la sig consulta? o de rehacerla de manera tal que mantenga la funcionalidad? lo unico que hace es devolver un int que no exista en la tabla tdot_selection.id_selection

Código: [Seleccionar]
SELECT TOP 1 CONVERT(INT, Val)
FROM   tdot_selection
       CROSS APPLY (SELECT( Floor(Rand() * CONVERT(INT, 0x7FFFFFFF)) )) AS Random(Val)
WHERE  Val NOT IN (SELECT id_selection
                   FROM   tdot_selection)

Gracias
Título: Re:temita con CROSS APPLY
Publicado por: ssccaann43 en Octubre 01, 2013, 11:58:47 am
Consulta hay alguna manera de quitar la tabla del from en la sig consulta? o de rehacerla de manera tal que mantenga la funcionalidad? lo unico que hace es devolver un int que no exista en la tabla tdot_selection.id_selection

Código: [Seleccionar]
SELECT TOP 1 CONVERT(INT, Val)
FROM   tdot_selection
       CROSS APPLY (SELECT( Floor(Rand() * CONVERT(INT, 0x7FFFFFFF)) )) AS Random(Val)
WHERE  Val NOT IN (SELECT id_selection
                   FROM   tdot_selection)

Gracias

Buenas,

Inicialmente desconozco porque usas el CROSS APPLY si en esta consulta que generas, estas forzando a que te muestre el TOP1, es decir el primer registro, por lo cual el CROSS APPLY no hace nada, a mi parecer.

Es como si hicieras esto:

Código: [Seleccionar]
SELECT TOP 1 convert(int,3) as Val from dbo.CualquierTabla CROSS APPLY(SELECT( Floor(Rand() * CONVERT(INT, 0x7FFFFFFF)) )) AS Random(VAL)
SELECT TOP 1 convert(int,3) as Val from dbo.CualquierTabla CROSS APPLY(SELECT( Floor(Rand() * CONVERT(INT, 5)) )) AS Random(VAL)
SELECT TOP 1 convert(int,3) as Val from dbo.CualquierTabla

Eso te arrojará siempre el Numero 3.

Ahora:
Código: [Seleccionar]
WHERE  Val NOT IN (SELECT id_selection
                   FROM   tdot_selection)

Hace que tu consulta muestre solamente el Primer Valor Registrado mientras no este en esa tabla...!

Saludos
Título: Re:temita con CROSS APPLY
Publicado por: cobein en Octubre 01, 2013, 12:38:51 pm
Scan, eso mismo es lo que tiene que hacer muestra el primer valor random que no este en la tabla, el cross apply lo uso para poder aplicar el valor random al select y al where.
Título: Re:temita con CROSS APPLY
Publicado por: ssccaann43 en Octubre 01, 2013, 12:55:56 pm
No se,

Se me ocurre algo como esto:

Código: [Seleccionar]

SELECT ( Floor(Rand() * CONVERT(INT, 0x7FFFFFFF)) )
WHERE ( Floor(Rand() * CONVERT(INT, 0x7FFFFFFF)) ) NOT IN (SELECT id_selection
                   FROM   tdot_selection)