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

Problemas con el WHERE CASE WHEN

Estas en el tema de Problemas con el WHERE CASE WHEN en el foro de SQL Server en Foros del Web. Buenas noches. Pido de su valiosa colaboracion, para que me ayuden a resolver este problema en SQL. Actualmente estoy haciendo una consulta que me regresa ...
  #1 (permalink)  
Antiguo 21/06/2017, 19:05
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Problemas con el WHERE CASE WHEN

Buenas noches.

Pido de su valiosa colaboracion, para que me ayuden a resolver este problema en SQL.

Actualmente estoy haciendo una consulta que me regresa los pagos recibidos con su respectiva tasa de cambio, con el que el pago fue realizado.

Para ello lo hago de la siguiente forma:

Este primer select me permite sacar las tasas de cambio sin ningun problema.
Código:
SELECT         
          E.sell_rate 
          FROM CURRENCY_EXCHANGE E, Cash_Receipt P
          WHERE 
          Convert(varchar(10),CONVERT(date,P.Create_Date,106),103) = 
          CASE 
          WHEN Convert(varchar(10),CONVERT(date,E.effective_date,106),103) = Convert(varchar(10),CONVERT(date,P.Create_Date,106),103)
              THEN Convert(varchar(10),CONVERT(date,E.effective_date,106),103)
          ELSE
              Convert(varchar(10),CONVERT(date,P.Create_Date,106),103)
          END


El problema se origina, cuando hago este select y lo anido para sacar otra informacion de otras tablas-
Código:
        Select C.Id,
       Convert(varchar(10),CONVERT(date,P.Create_Date,106),103) Create_Date,
       --- Incluyo la Tasa de Cambio---------------------------------------------------------------------------------------------------
(  SELECT         
          E.sell_rate 
          FROM CURRENCY_EXCHANGE E
          WHERE 
          Convert(varchar(10),CONVERT(date,P.Create_Date,106),103) = 
          CASE 
          WHEN Convert(varchar(10),CONVERT(date,E.effective_date,106),103) = Convert(varchar(10),CONVERT(date,P.Create_Date,106),103)
              THEN Convert(varchar(10),CONVERT(date,E.effective_date,106),103)
          ELSE
              Convert(varchar(10),CONVERT(date,P.Create_Date,106),103)
          END  
          ) as Tasa
       ---------------------------------------------------------------------------------------------------------------------------------
      from Customer C, Cash_Receipt P, cash_receipt_line Det, Receivable R  
      where  
        C.ID = P.CUSTOMER_ID And
        P.Check_id = Det. Check_Id And
        P.Customer_Id = Det.Customer_Id And
        R.Invoice_Id = Det.Invoice_Id And
        P.Status = 'A'
      Group by C.Id, P.Create_Date
En la primer consulta me regresa las tasas, pero cuando hago el anidado, no me regresa ningun registro.

Que estare haciendo mal?

Me podrian ayudar por favor.

Desde ya muchas gracias, y cualquier duda favor avisar para poder ampliar.
  #2 (permalink)  
Antiguo 22/06/2017, 11:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con el WHERE CASE WHEN

¿Como es que esta ANIDANDO la consulta de TASA DE INTERES (select interno) con su SELECT externo o general?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 22/06/2017, 12:24
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Problemas con el WHERE CASE WHEN

Hola, pues lo que hago es anidarlo con el campo P.Create_Date

Código:
Convert(varchar(10),CONVERT(date,P.Create_Date,106),103) = 
          CASE 
          WHEN Convert(varchar(10),CONVERT(date,E.effective_date,106),103) = Convert(varchar(10),CONVERT(date,P.Create_Date,106),103)
              THEN Convert(varchar(10),CONVERT(date,E.effective_date,106),103)
          ELSE
              Convert(varchar(10),CONVERT(date,P.Create_Date,106),103)
          END
Si te fijas lo que hago es amarrarlo, y lo condiciono a que sino lo encuentro, utilizo el campo P.Create_Date.

El problema que se da, es que cuando ejecuto el select independiente, no me da ningun problema, pero al anidarlo, no regresa ningun resultado, y a la vez no da ningun error.

Espero haber aclarado tu duda.
  #4 (permalink)  
Antiguo 23/06/2017, 07:01
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: Problemas con el WHERE CASE WHEN

y porque lo haces asi? creo que seria mejor hacerlo de esta manera:

Código SQL:
Ver original
  1. SELECT C.Id,
  2.        CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103) Create_Date,
  3. ------------------------------
  4.       FROM Customer C
  5. LEFT JOIN
  6.        --- Incluyo la Tasa de Cambio---------------------------------------------------------------------------------------------------
  7. (  SELECT        
  8.           E.sell_rate, campo que haga referencia con customer
  9.           FROM CURRENCY_EXCHANGE E
  10.           WHERE
  11.           CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103) =
  12.           CASE
  13.           WHEN CONVERT(VARCHAR(10),CONVERT(DATE,E.effective_date,106),103) = CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103)
  14.               THEN CONVERT(VARCHAR(10),CONVERT(DATE,E.effective_date,106),103)
  15.           ELSE
  16.               CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103)
  17.           END  
  18.           ) AS Tasa ON (tasa.campoid=c.id)
  19.        ---------------------------------------------------------------------------------------------------
  20.  
  21. , Cash_Receipt P, cash_receipt_line Det, Receivable R  
  22.       WHERE  
  23.         C.ID = P.CUSTOMER_ID AND
  24.         P.Check_id = Det. Check_Id AND
  25.         P.Customer_Id = Det.Customer_Id AND
  26.         R.Invoice_Id = Det.Invoice_Id AND
  27.         P.STATUS = 'A'
  28.       GROUP BY C.Id, P.Create_Date

Otra cosa usa joins explicitos en lugar de implicitos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 23/06/2017, 17:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Respuesta: Problemas con el WHERE CASE WHEN

Buenas tardes.

Primeramente, te agradezco el apoyo para tratar de solucionar este tema.

Para continuar, quiero comentarte que estoy intentando correr la consulta que me proporcionaste, pero me dice que tengo un problema de sintaxis, pero para ser sincero no encuentro el error, te comparto como esta la consulta.

Código:
       SELECT C.Id,
       CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103) Create_Date,
      FROM Customer C
LEFT JOIN
(  SELECT         
          E.sell_rate, E.currency_id 
          FROM CURRENCY_EXCHANGE E
          WHERE 
          CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103) = 
          CASE 
          WHEN CONVERT(VARCHAR(10),CONVERT(DATE,E.effective_date,106),103) = CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103)
              THEN CONVERT(VARCHAR(10),CONVERT(DATE,E.effective_date,106),103)
          ELSE
              CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103)
          END  
          ) AS Tasa ON (Tasa.currency_id=C.currency_id)
, Cash_Receipt P, cash_receipt_line Det, Receivable R  
      WHERE  
        C.ID = P.CUSTOMER_ID AND
        P.Check_id = Det. Check_Id AND
        P.Customer_Id = Det.Customer_Id AND
        R.Invoice_Id = Det.Invoice_Id AND
        P.STATUS = 'A'
      GROUP BY C.Id, P.Create_Date
  #6 (permalink)  
Antiguo 26/06/2017, 07:32
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: Problemas con el WHERE CASE WHEN

Código SQL:
Ver original
  1. SELECT C.Id,
  2.        CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103) Create_Date,
  3. ------------------------------
  4.       FROM Customer C
  5. LEFT JOIN
  6.        --- Incluyo la Tasa de Cambio---------------------------------------------------------------------------------------------------
  7. (  SELECT        
  8.           E.sell_rate, campo que haga referencia con customer
  9.           FROM CURRENCY_EXCHANGE E
  10.           WHERE
  11.           CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103) =
  12.           CASE
  13.           WHEN CONVERT(VARCHAR(10),CONVERT(DATE,E.effective_date,106),103) = CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103)
  14.               THEN CONVERT(VARCHAR(10),CONVERT(DATE,E.effective_date,106),103)
  15.           ELSE
  16.               CONVERT(VARCHAR(10),CONVERT(DATE,P.Create_Date,106),103)
  17.           END  AS campo
  18.           ) AS Tasa ON (tasa.campoid=c.id)
  19.        ---------------------------------------------------------------------------------------------------
  20.  
  21. , Cash_Receipt P, cash_receipt_line Det, Receivable R  
  22.       WHERE  
  23.         C.ID = P.CUSTOMER_ID AND
  24.         P.Check_id = Det. Check_Id AND
  25.         P.Customer_Id = Det.Customer_Id AND
  26.         R.Invoice_Id = Det.Invoice_Id AND
  27.         P.STATUS = 'A'
  28.       GROUP BY C.Id, P.Create_Date

Mis disculpas prueba con eso, y revisa los nombres de los campos, date cuenta que estoy haciendo los joins por campos ID, y no se si esos campos existan o no
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: actual, case, 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 17:14.