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

If else

Estas en el tema de If else en el foro de SQL Server en Foros del Web. Buenaas a tod@s, muchachos tengo el siguiente problema de sintaxis el query es el siquiente @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT ( U . ...
  #1 (permalink)  
Antiguo 09/10/2013, 14:19
Avatar de EderBarriosCamargo  
Fecha de Ingreso: marzo-2013
Mensajes: 55
Antigüedad: 11 años, 1 mes
Puntos: 0
If else

Buenaas a tod@s, muchachos tengo el siguiente problema de sintaxis
el query es el siquiente
Código SQL:
Ver original
  1. SELECT (U.Nombres+' '+U.Papellido+' '+U.Sapellido) AS Vendedor, U.CodigoVendedor,U.IdUsuario,U.canal,
  2.                     IF U.canal=DIAGEO //Si el canal del vendedor es DIAGEO
  3.                     BEGIN
  4.                     (SELECT COUNT(*) AS Objetivo FROM clientes WHERE vendedor_LIC=U.CodigoVendedor AND diavisita_LIC LIKE'%martes%') AS objetivo, //consulte a la columna diavisita_lic
  5.                     END
  6.                     ELSE // sino
  7.                     BEGIN
  8.                (SELECT COUNT(*) AS Objetivo FROM clientes WHERE vendedor_inst=U.CodigoVendedor AND diavisita_inst LIKE'%martes%') AS objetivo,  consulte a la columna diavisita_inst
  9.            
  10.                 END
  11.                 (SELECT COUNT(*) AS Objetivo FROM Visitas WHERE Idusuario=U.CodigoVendedor AND fechavisita>='" . date("d/m/Y", strtotime("now -5 day")) . "') AS Hecho,
  12.                 (SELECT COUNT(*) AS Objetivo FROM Visitas WHERE Idusuario=U.CodigoVendedor AND fechavisita>='" . date("d/m/Y", strtotime("now -5 day")) . "' AND Vdistancia <'150') AS HechoDist,
  13.                     (SELECT COUNT(*) AS Nume FROM pedidos WHERE idcreador=U.IdUsuario AND (estado='1' OR estado='2') AND fechapedido>='" . date("d/m/Y") . "'  )AS NumeroPedidosIndirectos,
  14.                          (SELECT COUNT(*) AS Nume FROM pedidos WHERE Idvendedor=U.CodigoVendedor AND (estado='1' OR estado='2') AND fechapedido>='" . date("d/m/Y") . "'  )AS NumeroPedidosDirectos,
  15.                          (SELECT CONVERT (VARCHAR,CAST(SUM(PrecioTotal) AS money),1) AS venta FROM ventas WHERE vende=CAST (U.CodigoVendedor AS INT) AND (fechaDocumento>= '" . date("d/m/Y") . "')) AS Venta
  16.             FROM Users AS U WHERE (U.IdTipoUsuario>=3 AND U.IdTipoUsuario <=5)

Pero me sale un error de sintaxis el query esta bien ya que lo probe, pero necesito ese pequeño detalle gracias.
ERROR:Sintaxis incorrecta cerca de la palabra clave 'if'.
  #2 (permalink)  
Antiguo 09/10/2013, 14:44
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: If else

donde viste que el if se utiliza de ese modo???? prueba con esto:

Código SQL:
Ver original
  1. SELECT (U.Nombres+' '+U.Papellido+' '+U.Sapellido) AS Vendedor, U.CodigoVendedor,U.IdUsuario,U.canal,
  2.                     CASE WHEN U.canal=DIAGEO --Si el canal del vendedor es DIAGEO
  3.                     THEN
  4.                     (SELECT COUNT(*) AS Objetivo FROM clientes WHERE vendedor_LIC=U.CodigoVendedor AND diavisita_LIC LIKE'%martes%')  --consulte a la columna diavisita_lic                    
  5.                     ELSE -- sino                    
  6.                (SELECT COUNT(*) AS Objetivo FROM clientes WHERE vendedor_inst=U.CodigoVendedor AND diavisita_inst LIKE'%martes%') END AS objetivo, -- consulte a la columna diavisita_inst                            
  7.                 (SELECT COUNT(*) AS Objetivo FROM Visitas WHERE Idusuario=U.CodigoVendedor AND fechavisita>='" . date("d/m/Y", strtotime("now -5 day")) . "') AS Hecho,
  8.                 (SELECT COUNT(*) AS Objetivo FROM Visitas WHERE Idusuario=U.CodigoVendedor AND fechavisita>='" . date("d/m/Y", strtotime("now -5 day")) . "' AND Vdistancia <'150') AS HechoDist,
  9.                     (SELECT COUNT(*) AS Nume FROM pedidos WHERE idcreador=U.IdUsuario AND (estado='1' OR estado='2') AND fechapedido>='" . date("d/m/Y") . "'  )AS NumeroPedidosIndirectos,
  10.                          (SELECT COUNT(*) AS Nume FROM pedidos WHERE Idvendedor=U.CodigoVendedor AND (estado='1' OR estado='2') AND fechapedido>='" . date("d/m/Y") . "'  )AS NumeroPedidosDirectos,
  11.                          (SELECT CONVERT (VARCHAR,CAST(SUM(PrecioTotal) AS money),1) AS venta FROM ventas WHERE vende=CAST (U.CodigoVendedor AS INT) AND (fechaDocumento>= '" . date("d/m/Y") . "')) AS Venta
  12.             FROM Users AS U WHERE (U.IdTipoUsuario>=3 AND U.IdTipoUsuario <=5)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 09/10/2013, 15:15
Avatar de EderBarriosCamargo  
Fecha de Ingreso: marzo-2013
Mensajes: 55
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: If else

segui mi intuición, ya que no vi un ejemplo parecido al lo que necesitaba.

Gracias.
  #4 (permalink)  
Antiguo 10/10/2013, 07:42
Avatar de EderBarriosCamargo  
Fecha de Ingreso: marzo-2013
Mensajes: 55
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: If else

Libras de echo quiero optimizar la consulta, pero ¿que hay que tener en cuenta para obtmizarla?, ya que esta muy lenta al rededor de 15 segundos, y eso que todavía no he aplicado los filtros.
Gracias.
  #5 (permalink)  
Antiguo 10/10/2013, 07:55
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: If else

se podria tratar de optimizar metiendo la tabla de las consultas dentro del join y haciendo los conteos con case when, ya revisaste los indices de tus datos?, ya revisaste el plan de ejecucion?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: fecha, select
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 02:49.