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

[SOLUCIONADO] Sentencia SQL

Estas en el tema de Sentencia SQL en el foro de SQL Server en Foros del Web. Hola: Tengo varias tablas que se unen entre si con id_tabla, ahora bien, dentro de una de ellas tengo un campo que dependiendo de su ...
  #1 (permalink)  
Antiguo 10/12/2013, 16:26
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Sentencia SQL

Hola:

Tengo varias tablas que se unen entre si con id_tabla, ahora bien, dentro de una de ellas tengo un campo que dependiendo de su valor puede hacer o no un JOIN a otra tabla. Ej:
Código SQL:
Ver original
  1. SELECT tabla1.campo1
  2. FROM (tabla1 INNER JOIN tabla2 ON (
  3. (tabla2.campo2 = tabla1.campo2 AND tabla2.campo5 >= tabla1.campo) OR
  4. (tabla2.campo3 = tabla1.campo3 AND tabla2.campo6 >= tabla1.campo) OR
  5. (tabla2.campo4 = tabla1.campo4 AND tabla2.campo7 >= tabla1.campo))
  6. INNER JOIN tabla3 ON tabla3.id = tabla1.idtabla3 AND tabla3.fechainicial <= 'la fecha buscada'
  7. INNER JOIN tabla4 ON tabla3.id = tabla4.idtabla3
  8. AND tabla3.fechafinal >= 'la fecha buscada')
  9. INNER JOIN tabla5 ON tabla5.id = tabla2.id_tabla5 AND tabla5.idtabla4 = tabla1.idtabla4
  10. WHERE tabla2.id = valorbuscado
  11. GROUP BY tabla1.campo1
Ahora bien, el ultimo JOIN sobre la tabla 5 quiero excluirlo si por ejemplo el campo2 de la tabla 1 trae un valor 0 y si trae valor diferente anexarlo.

¿Se puede realizar directo en la consulta? ¿O se debe generar por separado?

Última edición por gnzsoloyo; 10/12/2013 a las 16:43
  #2 (permalink)  
Antiguo 10/12/2013, 16:29
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: Sentencia SQL

podria ser algo asi:


Código SQL:
Ver original
  1. DECLARE @query VARCHAR(MAX)
  2.  
  3. SET @query='SELECT tabla1.campo1
  4. FROM (tabla1 INNER JOIN tabla2 ON (
  5. (tabla2.campo2 = tabla1.campo2 AND tabla2.campo5 >= tabla1.campo) OR
  6. (tabla2.campo3 = tabla1.campo3 AND tabla2.campo6 >= tabla1.campo) OR
  7. (tabla2.campo4 = tabla1.campo4 AND tabla2.campo7 >= tabla1.campo))
  8. INNER JOIN tabla3 ON tabla3.id = tabla1.idtabla3 AND tabla3.fechainicial <= 'la fecha buscada'
  9. INNER JOIN tabla4 ON tabla3.id = tabla4.idtabla3
  10. AND tabla3.fechafinal >= 'la fecha buscada')'
  11.  
  12. IF (SELECT campo FROM tabla)=1 THEN
  13. SET @query=@query + 'INNER JOIN tabla5 ON tabla5.id = tabla2.id_tabla5 AND tabla5.idtabla4 = tabla1.idtabla4'
  14.  
  15.  
  16. SET @query='WHERE tabla2.id = valorbuscado
  17. GROUP BY tabla1.campo1 '
  18.  
  19. EXEC sp_executesql @query
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 10/12/2013, 16:32
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Sentencia SQL

Hola Libras:

Cierto...solo tengo un detalle, la sentencia la mando a llamar desde un script y pasa como una cadena. ¿Esto funciona solamente como un procedimiento almacenado?
  #4 (permalink)  
Antiguo 10/12/2013, 16:34
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: Sentencia SQL

pues entonces manda la cadena como tal(ya con las condiciones) y ejecutas el procedure y listo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 10/12/2013, 16:40
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Sentencia SQL

Hola Libras:

Es correcto, creo que la forma más sencilla de hacerlo es enviando la cadena como comentas. Gracias

Etiquetas: campo, fecha, select, sentencia, sql, tabla
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 10:14.