Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta en SQL compleja

Estas en el tema de Consulta en SQL compleja en el foro de SQL Server en Foros del Web. Hola buenos dias (noches) comunidad, veran tengo la siguiente tabla: employments con sus respectivos campos: name,lastname,address.snumber,phone1,phone2,activi ty,suspect Y dentro de esta tabla ejecuto el siguiente ...
  #1 (permalink)  
Antiguo 13/09/2012, 09:17
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Consulta en SQL compleja

Hola buenos dias (noches) comunidad, veran tengo la siguiente tabla:

employments con sus respectivos campos:

name,lastname,address.snumber,phone1,phone2,activi ty,suspect

Y dentro de esta tabla ejecuto el siguiente stored procedure:

Código SQL:
Ver original
  1. (
  2. @U INT,
  3. @L INT
  4. )
  5. AS
  6. DECLARE @R INT
  7. SET @L = 1 ---- 1st value
  8. SET @U= 5 ---- Last Value
  9. SELECT @R = ROUND (((@U - @L -1) * RAND() + @L), 0)----Upper to Lower
  10. --SELECT @R----Random Value
  11.  
  12. --Select 1 - 4 random records
  13. SELECT TOP (ABS(CHECKSUM(NEWID())) % 1 + @R )
  14.     id,name,lastname,snumber,phone1,phone2,activity,suspect
  15. FROM employments
  16. WHERE
  17. activity=1
  18. ORDER BY NEWID()

Lo que hace es hacerme una selección random de entre 1 a 4 personas de la tabla y mostrármelos en un pdf en itextsharp, ahora lo que quiero es que dentro de una funcionalidad en mi form (vb.net) que tengo donde marca para que uno empleado salga obligatoria mente sea mostrado junto a los que salen
random.

No se si me explique, es decir:

En mi form, selecciono a un empleado para que salga obligatoriamente, vamos a llamarlo:

-Pedro

Ahora los que van a salir random son...

-Ana
-Juan
-Ignacio

quiero que el stored procedure me selecciono los random aparte me seleccione a "PEDRO", para esto, tengo una consulta para sacar al seleccionado obligatoriamente, es la siguiente:

Código SQL:
Ver original
  1. SELECT * FROM employments WHERE suspect=1

Espero me puedan ayudar y también espero haber sido lo suficientemente descriptivo para que me ayuden con este problemilla.

Saludos!
  #2 (permalink)  
Antiguo 13/09/2012, 09:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta en SQL compleja

un union :)

digamos tu procedure saca

select name from tabla(aqui vendria ana, luis y juan)
union
select name from tabla where id=@tu_id(aqui seria pedro)

y el resultado

ana
luis
juan
pedro

:)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 13/09/2012, 10:05
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Consulta en SQL compleja

Hola, efectivamente verifique que la UNION funcionara y si lo hace, pero tengo un detalle cuando aniado a la consulta el ORDER BY NEWID()

Me bota este error:

ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

esta es la consulta:

Código SQL:
Ver original
  1. (
  2. @U INT,
  3. @L INT
  4. )
  5. AS
  6. DECLARE @R INT
  7. SET @L = 1 ---- 1st value
  8. SET @U= 5 ---- Last Value
  9. SELECT @R = ROUND (((@U - @L -1) * RAND() + @L), 0)----Upper to Lower
  10. --SELECT @R----Random Value
  11.  
  12. --Select 1 - 4 random records
  13. SELECT TOP (ABS(CHECKSUM(NEWID())) % 1 + @R )
  14.     id,name,lastname,snumber,phone1,phone2,activity,suspect
  15. FROM employments
  16. WHERE
  17. activity=1
  18. UNION
  19. SELECT id,name,lastname,snumber,phone1,phone2,activity,suspect
  20. FROM employments
  21. WHERE
  22. suspect=1
  23. ORDER BY NEWID()

en las pruebas sin order by me arroja resultados pero siempre iguales..
  #4 (permalink)  
Antiguo 13/09/2012, 10:19
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta en SQL compleja




SELECT TOP (ABS(CHECKSUM(NEWID())) % 1 + @R )
id,name,lastname,snumber,phone1,phone2,activity,su spect into #temp
FROM employments
WHERE
activity=1
ORDER BY id

select * from #temp
union
SELECT id,name,lastname,snumber,phone1,phone2,activity,su spect
FROM employments
WHERE
suspect=1

drop table #temp


saludos!

:)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/09/2012, 10:36
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Consulta en SQL compleja

Muchas gracias por contestar..ahora vengo de nuevo, hahaha xD

esta es la consulta, pero me dice que ya existe un objeto, donde la tengo que declarar ya intente en varios lugares, pero nada..aqui esta la consulta


Código SQL:
Ver original
  1. (
  2. @U INT,
  3. @L INT
  4. )
  5. AS
  6. DECLARE @R INT
  7. SET @L = 1 ---- 1st value
  8. SET @U= 5 ---- Last Value
  9. SELECT @R = ROUND (((@U - @L -1) * RAND() + @L), 0)----Upper to Lower
  10. --SELECT @R----Random Value
  11.  
  12. --Select 1 - 4 random records
  13. CREATE TABLE #a (id INT, name VARCHAR(50),lastname VARCHAR(50),snumber VARCHAR(50),phone1 VARCHAR(50),phone2 VARCHAR(50),activity INT,suspect INT)
  14. SELECT TOP (ABS(CHECKSUM(NEWID())) % 1 + @R )
  15.     id,name,lastname,snumber,phone1,phone2,activity,suspect INTO #a
  16. FROM employments
  17. WHERE
  18. activity=1 AND suspect=0
  19. ORDER BY NEWID()
  20. SELECT * FROM #a
  21. UNION
  22. SELECT id,name,lastname,snumber,phone1,phone2,activity,suspect
  23. FROM employments
  24. WHERE activity=1 AND suspect=1
  25.  
  26. DROP TABLE #a


Este es el erro..

There is already an object named '#a' in the database.
  #6 (permalink)  
Antiguo 13/09/2012, 10:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta en SQL compleja

quita esto:

-- CREATE TABLE #a (id int, name varchar(50),lastname varchar(50),snumber varchar(50),phone1 varchar(50),phone2 varchar(50),activity -- int,suspect int)


hacer un select into from tabla te crea una tabla con la estructura que tiene el select, no necesitas hacer la declaracion de tabla :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 13/09/2012, 10:53
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Consulta en SQL compleja

Haré pruebas enseguida, y te comento como me resulto (:

EDIT:

Solo le anadi algunas cosas, pero funciono perfectamente tu orientación e ideas..MUCHAS GRACIAS!


:D Ahora en los reportes ya me sale obligatorio el registro que retorne positivo en suspect...de nuevo gracias amigo!

Última edición por 3ricks0ul; 13/09/2012 a las 11:02

Etiquetas: compleja, select, sql, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:51.