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

if select gran duda

Estas en el tema de if select gran duda en el foro de Mysql en Foros del Web. Hola tengo una duda a la hora de usar el if cuando consulto una bd de oracle digamos que tengo una tabla en la cual ...
  #1 (permalink)  
Antiguo 04/11/2008, 06:39
 
Fecha de Ingreso: septiembre-2008
Mensajes: 70
Antigüedad: 15 años, 7 meses
Puntos: 0
Busqueda if select gran duda

Hola tengo una duda a la hora de usar el if cuando consulto una bd de oracle digamos que tengo una tabla en la cual el tipo de precio me lo indican estos campos.

Si factor1 = ‘1’
Per ruptura

sino
Si factor2 = ‘1’
per previsió

sino
Si factor3 = ‘1’
Per rotació
Sino
Per ruptura

esto lo soluciono haciendo la consulta y luego en una aplicacion en c++ preguntando por el valor de los campos, ahora mi enorme duda es. con una herramientas de consulta directas a la BBDD (en mi caso SQL Developer)
puedo hacer una consulta con algo similar a un if, es que he probado con la sentencia case pero como son campos diferentes no veo manera de ocnjugarlos existe alguna manera ?

Gracias
  #2 (permalink)  
Antiguo 04/11/2008, 07:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: if select gran duda

Con un store procedure.
Las sentencias IF ... THEN ELSE ... ENDIF son controles de flujo que solamente operan dentro de un store procedure. Caso distinto es usar la función CASE de control de flujo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/11/2008, 10:18
 
Fecha de Ingreso: septiembre-2008
Mensajes: 70
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: if select gran duda

con un store procedure es una solucion como la mia de c++ me refiero a la consulta como tal en lenguaje sql o sea directo contra la base de datos
  #4 (permalink)  
Antiguo 04/11/2008, 10:25
 
Fecha de Ingreso: septiembre-2008
Mensajes: 70
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: if select gran duda

existe alguna manera de comparar mas de un campo en un case ? o de trabajar con el resultado de ese case por ejemplo quisiera hacer esto

case factor1
when 1 then 'OK'
else 'NOK'
end caso1

case caso1
when 'NOK' then 'precio2'
end caso2

no se si me explico trato de hacer un case con el resultado de otro case

pero no se como hacerlo
se podria hacer un case anidado ?
  #5 (permalink)  
Antiguo 04/11/2008, 10:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: if select gran duda

1. Un store procedure es un recurso de SQL que corre en servidor, y como tal no es un método de programación como C++.
2. SQL no es un lenguaje de programación de aplicaciones, sino de consultas, por lo que en realidad sólo tiene 3 sentencias básicas: INSERT, UPDATE, DELETE, 2 de sentencias de construcción: CREATE, DROP y 2 sentencias de control: GRANT y REVOKE. Todo lo demás son modificadores de esto.
3. Un store procedure es mucho más rápido en operaciones de consulta que el mejor método o función programada en C++ que puedas intentar construir.
4. No veo que hayas leído los links que puse en mi post, o de lo contrario habrís notado que hay algunas funciones agregadas al SQL por parte de MySQL que pueden cumplir con lo que deseas. Para el caso específico, el CASE que si puede ir en conjunto de campos del SELECT.
5. Finalmente, un store procedure puede devolver una tabla de consulta si la última operación que realiza es precisamente seleccionar el conjunto de datos requerido y que es recogido en el cuerpo del mismo. Yo tengo un SP que me crea sentencias SELECT en forma dinámica (sentencias preparadas), que procesoa una media de 350.000 registros para devolverme alrededor de 10.000 que necesito... en un SP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 04/11/2008, 11:12
 
Fecha de Ingreso: septiembre-2008
Mensajes: 70
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: if select gran duda

no acabas de entender mi pregunta con un st seria muy sencillo de hacer ademas ya esta echo y funciona en mi caso quiero construir una sentencia sql que me devuelva lo que quiero sin sp ni procedimiento ninguno ademas de que el resultado de un sp no lo puedes almacenar en ninguna variable como si el resultado de una consulta esa es la diferencia.
  #7 (permalink)  
Antiguo 04/11/2008, 11:14
 
Fecha de Ingreso: septiembre-2008
Mensajes: 70
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: if select gran duda

en el link que me pasas hala del case tradicional que yo conozco donde comparas con los posibles valores que puede tomar un campo, y yo quiero comparar mas de un campo dentro del mismo case porque el resultado final dependera de mas de un campo de la tabla como explique encima
  #8 (permalink)  
Antiguo 04/11/2008, 11:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: if select gran duda

Cita:
Iniciado por javislim Ver Mensaje
no acabas de entender mi pregunta con un st seria muy sencillo de hacer ademas ya esta echo y funciona en mi caso quiero construir una sentencia sql que me devuelva lo que quiero sin sp ni procedimiento ninguno ademas de que el resultado de un sp no lo puedes almacenar en ninguna variable como si el resultado de una consulta esa es la diferencia.
El resultado de un SP se puede almacenar en un array o en una tabla (según el lenguaje que uses).
De hecho yo lo hago en VB.Net para la tabla que hacía referencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 04/11/2008, 11:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: if select gran duda

Cita:
Iniciado por javislim Ver Mensaje
en el link que me pasas hala del case tradicional que yo conozco donde comparas con los posibles valores que puede tomar un campo, y yo quiero comparar mas de un campo dentro del mismo case porque el resultado final dependera de mas de un campo de la tabla como explique encima
Desde el punto de vista programático, no es un CASE tradicional, porque funciona como campo de SELECT
Un caso ejemplo bastante simple sería:

Código sql:
Ver original
  1. CREATE OR REPLACE VIEW CHOFERXDIA AS
  2. SELECT
  3.   CHOFER_ID,
  4.   DATE_FORMAT(FECHADESDE,'%d/%m/%Y') 'FECHA DESDE',
  5.   DATE_FORMAT(FECHAHASTA,'%d/%m/%Y') 'FECHA HASTA',
  6.   PATENTE,
  7.   (CASE DATE_FORMAT(FECHA,'%w')
  8.   WHEN 0 THEN 'DOMINGO'
  9.   WHEN 1 THEN 'LUNES'
  10.   WHEN 2 THEN 'MARTES'
  11.   WHEN 3 THEN 'MIERCOLES'
  12.   WHEN 4 THEN 'JUEVES'
  13.   WHEN 5 THEN 'VIERNES'
  14.   WHEN 6 THEN 'SABADO'
  15.   END)  'DIA DE SEMANA',
  16.   DATE_FORMAT(FECHA,'%d/%m/%Y') 'DIA',
  17.   DESDE 'DESDE HORA',
  18.   HASTA 'HASTA HORA',
  19.   INFRACCIONES ,
  20.   TIEMPOINFRAC 'T. DE INFRACCION',
  21.   MOTOPARADO 'MOTOR PARADO',
  22.   SINMOV 'TOTAL SIN MOVIMIENTO',
  23.   CONMOV 'TOTAL EN MOVIMIENTO'
  24. FROM ESTADCHOFERXDIA
  25. INNER JOIN CHOFER C USING(CHOFER_ID);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 11:07.