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

Anidamientos IF

Estas en el tema de Anidamientos IF en el foro de SQL Server en Foros del Web. Buenas, tengo una estructura como la siguiente, pero si lo ejecuto tal cual, no me entra por ejemplo en el utlimo IF si se cumple ...
  #1 (permalink)  
Antiguo 10/12/2010, 05:32
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Anidamientos IF

Buenas, tengo una estructura como la siguiente, pero si lo ejecuto tal cual, no me entra por ejemplo en el utlimo IF si se cumple la condicion ultima. Sin embargo, si lo hago por separado,me funciona correctamente. ¿Por que?No lo entiendo

IF EXISTS .....
BEGIN

END

ELSE IF EXISTS......
BEGIN

END


ELSE IF EXISTS.......
BEGIN

END


RETURN
  #2 (permalink)  
Antiguo 10/12/2010, 08:15
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Anidamientos IF

Para que se cumplan el ultimo IF no se deben cumplir todas las condiciones anteriores.
Has probado eso? Si lo has probado entonces alguna de tus condiciones no esta bien.
Ah, te recomiendo identar tu codigo cuando se trate de anidamiento.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 10/12/2010, 08:34
 
Fecha de Ingreso: noviembre-2010
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Anidamientos IF

En el código que mostrás no estás anidando ifs, Está uno abajo del otro. Si no te entra al último es porque ya entro por otro como ya te dijeron.
Si lo que pretendés es que pueda entrar a más de un if, tenes que sacar los else.

Saludos!
  #4 (permalink)  
Antiguo 10/12/2010, 08:48
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

como que sacar los else???
  #5 (permalink)  
Antiguo 10/12/2010, 08:55
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

Yo tengo esto: entiendo que esto es anidar IF no?
......

IF EXISTS (SELECT N1 FROM Tabla1 WHERE Tipo = @Tipo EXCEPT SELECT N1 FROM Tabla2 WHERE @Fecha BETWEEN Tabla2.fecha1 AND Tabla2.fecha2)
BEGIN
SELECT N1 FROM Tabla1 WHERE Tipo = @Tipo EXCEPT SELECT N1 FROM Tabla2 WHERE @Fecha BETWEEN Tabla2.fecha1 AND Tabla2.fecha2)
END
ELSE IF EXISTS (SELECT N1 FROM Tabla1 WHERE Tipo = @Tipo EXCEPT SELECT N1 FROM Tabla2 WHERE @Fecha < Tabla2.fecha1 AND @Fecha BETWEEN Tabla2.fecha1AND Tabla2.fecha2)
BEGIN
SELECT N1 FROM Tabla1 WHERE Tipo = @Tipo EXCEPT SELECT N1 FROM Tabla2 WHERE @Fecha < Tabla2.fecha1 AND @Fecha BETWEEN Tabla2.fecha1AND Tabla2.fecha2
END
  #6 (permalink)  
Antiguo 10/12/2010, 09:09
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
Respuesta: Anidamientos IF

Humm... Creo que despues de un Else va otro Begin... Fijate, yo tengo esta estructura, capaz que te sirve:
Código:
IF(@IdConsulta=1)
BEGIN
	/*Consulta SELECT*/
END
ELSE
BEGIN
	IF(@IdConsulta=2)
	BEGIN
		/*Consulta SELECT*/
	END
	ELSE
	BEGIN
		IF(@IdConsulta=3)
		BEGIN
			/*Consulta SELECT*/
		END
		ELSE
		BEGIN
			IF(@IdConsulta=4)
			BEGIN
				/*Consulta SELECT*/
			END
			ELSE
			BEGIN
				IF(@IdConsulta=5)
				BEGIN
					/*Consulta SELECT*/
				END
				ELSE
				BEGIN
					IF(@IdConsulta=6)
					BEGIN
						/*Consulta SELECT*/
					END
					ELSE
					BEGIN
						IF(@IdConsulta=7)
						BEGIN
							/*Consulta SELECT*/
						END
						ELSE
						BEGIN
							IF(@IdConsulta=8)
							BEGIN
								/*Consulta SELECT*/
							END
							ELSE
							BEGIN
								IF(@IdConsulta=9)
								BEGIN
									/*Consulta SELECT*/
								END
								ELSE
								BEGIN
									IF(@IdConsulta=10)
									BEGIN
										/*Consulta SELECT*/
									END
									ELSE
									BEGIN
										IF(@IdConsulta=11)
										BEGIN
											/*Consulta SELECT*/
										END
										ELSE
										BEGIN
											IF(@IdConsulta=12)
											BEGIN
												/*Consulta SELECT*/
											END
											ELSE
											BEGIN
												IF(@IdConsulta=13)
												BEGIN
													/*Consulta SELECT*/
												END
												ELSE
												BEGIN
													IF(@IdConsulta=14)
													BEGIN
														/*Consulta SELECT*/
													END
													ELSE
													BEGIN
														IF(@IdConsulta=15)
														BEGIN
															/*Consulta SELECT*/
														END
														ELSE
														BEGIN
															IF(@IdConsulta=16)
															BEGIN
																/*Consulta SELECT*/
															END
															ELSE
															BEGIN
																IF(@IdConsulta=17)
																BEGIN
																	/*Consulta SELECT*/
																END
																ELSE
																BEGIN
																	IF(@IdConsulta=18)
																	BEGIN
																		/*Consulta SELECT*/
																	END
																	ELSE
																	BEGIN
																		IF(@IdConsulta=19)
																		BEGIN
																			/*Consulta SELECT*/
																		END
																	END
																END
															END
														END	
													END	
												END	
											END
										END
									END
								END
							END
						END
					END
				END
			END
		END
	END
END
Esta es una estructura que estoy usando actualmente y me funciona. Te reemplacé las consultas SQL que uso por el texto "/*Consulta SELECT*/", para que puedas leer mejor la estructura, que es lo que mas importa. Fijate si esta estructura te sirve.

Saludos, Lucas
  #7 (permalink)  
Antiguo 10/12/2010, 09:22
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

joer, lo he puesto como tienes tu y nada, no se que hacer ya
  #8 (permalink)  
Antiguo 10/12/2010, 09:28
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Anidamientos IF

Has probado uno a uno los IF hasta llegar al ultimo?
Alguno de los IF se cumple por eso no llega.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #9 (permalink)  
Antiguo 10/12/2010, 09:34
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

Tabla1

N1 ........ Tipo

133 ............... Infantil
121 ............... Adulto
200 ............... Infantil
222 ............... Adulto
233 ............... Infantil


Tabla2

Cliente N1 Fecha1 Fecha2

111 133 01/02/2011 0:00:00 04/02/2011 0:00:00
132 121 03/02/2011 0:00:00 05/02/2011 0:00:00
222 200 02/02/2011 0:00:00 06/02/2011 0:00:00
444 330 15/12/2010 0:00:00 16/12/2010 0:00:00
575 222 12/12/2010 0:00:00 14/12/2010 0:00:00
577 233 17/02/2011 0:00:00 19/02/2011 0:00:00


Con los IF que yo he expuesto, si quiero coger una Peliculta del tipo Adulto(y solo hay la 121 y la 222) y quiero coger , me da igual la que sea, son iguales(no tengo en cuenta eso, simplemente que son Adulto), yo en mi procedimiento, especifico:
Cliente,Adulto,01/02/2011(fechaentrada),04/02/2011(fechadevolucion). En este caso, solo seria posible coger la 222 ya que la 121 si seria posible cogerla el 01/02/2011 pero no puedo pq esta reservada hasta entre 03/02/2011 - 05/02/2011 y mis dias de reserva es entre el 01 y el 04.
No se si me he explicado y porque mis IFno funcionan
  #10 (permalink)  
Antiguo 10/12/2010, 09:36
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

de los 2 IF solo se cumple el que ponga primero
  #11 (permalink)  
Antiguo 10/12/2010, 09:52
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Anidamientos IF

Que valor tiene @Fecha?
Creo que esto no esta bien:
Código SQL:
Ver original
  1. @Fecha BETWEEN Tabla2.fecha1 AND Tabla2.fecha2
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #12 (permalink)  
Antiguo 10/12/2010, 09:56
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

@Fecha es un valos que le paso como parametro de entrada:

CREATE PROC RPelicula
(@CodCliente char(9),@Tipo varchar(10),@FechaEntrada datetime,@FechaDevolucion datetime)




IF EXISTS (SELECT N1 FROM Tabla1 WHERE Tipo = @Tipo EXCEPT SELECT N1 FROM Tabla2 WHERE @FechaEntrada BETWEEN Tabla2.fecha1 AND Tabla2.fecha2)
BEGIN
SELECT N1 FROM Tabla1 WHERE Tipo = @Tipo EXCEPT SELECT N1 FROM Tabla2 WHERE @FechaEntrada BETWEEN Tabla2.fecha1 AND Tabla2.fecha2)
END
ELSE IF EXISTS (SELECT N1 FROM Tabla1 WHERE Tipo = @Tipo EXCEPT SELECT N1 FROM Tabla2 WHERE @FechaEntrada < Tabla2.fecha1 AND @FechaSalida BETWEEN Tabla2.fecha1AND Tabla2.fecha2)
BEGIN
SELECT N1 FROM Tabla1 WHERE Tipo = @Tipo EXCEPT SELECT N1 FROM Tabla2 WHERE @FechaEntrada < Tabla2.fecha1 AND @FechaSalida BETWEEN Tabla2.fecha1AND Tabla2.fecha2
END
  #13 (permalink)  
Antiguo 10/12/2010, 10:03
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

perdon, donde pone FechaSalida es FechaDevolucion
  #14 (permalink)  
Antiguo 10/12/2010, 10:19
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Anidamientos IF

Prueba asi:
Código SQL:
Ver original
  1. SELECT N1
  2. FROM Tabla1 T1
  3. INNER JOIN Tabla2 T2 ON T1.N1 = T2.N1
  4. WHERE T1.Tipo = @Tipo
  5. AND @FechaEntrada > T2.fecha2
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #15 (permalink)  
Antiguo 10/12/2010, 10:40
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

pero como lo pones tu,no me dejo casos sin valorar?y porque como lo tngo yo no funciona?
  #16 (permalink)  
Antiguo 10/12/2010, 10:58
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Anidamientos IF

De la forma que tienes te muestra reservas de otras peliculas, por eso no llega al final.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #17 (permalink)  
Antiguo 10/12/2010, 11:28
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

que va, si los parametros de entrada cumplen el primer If, saca los del tipo que estan libres para esa fecha. Sin embargo, si no cumple la primera condicion si no que cumplen la segunda, lo que hace entonces es sacarme todas las peliculas del tipo solicitado, pero de ese tipo. Es decir , que el tipo si me las saca bien pero claro, lo que no quiero es que me saque todas, si no que me descarte las que ya estan cogidas para las fechas de entrada. El problema yo creo que estan en los anidamientos de los IF como he dicho, ya que si pruebo los IF por separados ,me saca lo correcto. Eso es lo que me mosquea de todo
  #18 (permalink)  
Antiguo 10/12/2010, 11:33
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Anidamientos IF

Has probado el codigo que te puse?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #19 (permalink)  
Antiguo 10/12/2010, 12:01
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

pero solo eso?o ese SELECT lometo en el IF?
  #20 (permalink)  
Antiguo 10/12/2010, 12:07
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Anidamientos IF

Mmm...
disculpa pero hay que tener un poco de criterio no?
Aca nadie esta para hacerte la tarea o tu trabajo.
Aca damos ideas, consejos, apoyamos, hasta resolvemos problemas pero hay que tener un minimo de criterio.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #21 (permalink)  
Antiguo 10/12/2010, 14:46
 
Fecha de Ingreso: abril-2008
Mensajes: 23
Antigüedad: 16 años
Puntos: 0
Respuesta: Anidamientos IF

a ver disculpame, creo que yo he planteado mi problema del anidamiento de los IF, los cuales no se porque no me da el resultado deseado. Yo en ningun caso he pedido que me des las cosas ni nada.Un saludo
  #22 (permalink)  
Antiguo 10/12/2010, 15:22
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Anidamientos IF

Oscar27.

Puedes poner los if de tu procedimiento con los parametros que le envias, y que es lo que quieres especificamente lo que hagan los if..?
la verdad intente tratar de saber que es lo que querias, pero con tantas cosas me enrede un poco...
quizas si fueras un poco mas claro te podria ayudar. Tengo experiencia con if anidados ...

Saludos :)

Etiquetas: Ninguno
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 03:37.