es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener valores de otra tabla según los valores de una columna en SQL.

Desde la consulta a continuación:

SELECT [BusinessDate],[Identifier],[Rate]
FROM [JAM].[dbo].[FXHistory]
WHERE BusinessDate = '2021-11-26'

Tengo esta salida:

[![enter image description here][1]][1]
[![FXHistory][1]][1]

Desde esta consulta:

SELECT 
       [ProductID],[ProductIDType],[CloseDate],[Last]
FROM [JAM].[dbo].[PricingHistory]
WHERE [ProductID] IN ('PAJAU ID Equity', 'PAJAE ID Equity', 'PAJKU ID Equity', 'PAJKE ID Equity', 'PAJMU ID Equity')
AND [CloseDate] BETWEEN '2021-11-26' AND '2021-11-26'
ORDER BY CloseDate;

Tengo esta salida:

[![enter image description here][1]][1]
[![PricingHistory][1]][1]

Cuando el cuarto carácter de ProductID sea “E”, quiero agregar la tasa “EURJPY”, y cuando termine con “U”, agregar la tasa “USDJPY”. Algo como esto:

ProductID        Acciones  Último  Tasa
PAJAE ID Equity   132425    265    128
PAJAU ID Equity   53364     126    113

¿Cómo puedo hacer esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes utilizar una declaración condicional (CASE WHEN) en tu declaración SELECT para agregar la tasa adecuada basada en la condición que especificaste. Aquí tienes un ejemplo de consulta que debería funcionar:

    SELECT 
           [ProductID],
           [Shares],
           [Last],
           CASE 
                WHEN RIGHT([ProductID], 1) = 'U' THEN [FXHistory].[Rate] -- si ProductID termina con U, agregar la tasa USDJPY
                WHEN SUBSTRING([ProductID], 4, 1) = 'E' THEN [FXHistory].[Rate] -- si el cuarto carácter es E, agregar la tasa EURJPY
                ELSE NULL -- si ninguna de las condiciones es verdadera, no agregar ninguna tasa
           END AS [Rate]
    FROM [JAM].[dbo].[PricingHistory]
    LEFT JOIN [JAM].[dbo].[FXHistory]
    ON [PricingHistory].[CloseDate] = [FXHistory].[BusinessDate]
       AND (
              (RIGHT([ProductID], 1) = 'U' AND [FXHistory].[Identifier] = 'USDJPY') -- unir con tasa USDJPY
              OR (SUBSTRING([ProductID], 4, 1) = 'E' AND [FXHistory].[Identifier] = 'EURJPY') -- unir con tasa EURJPY
           )
    WHERE [ProductID] IN (
                          'PAJAU ID Equity', 
                          'PAJAE ID Equity', 
                          'PAJKU ID Equity', 
                          'PAJKE ID Equity', 
                          'PAJMU ID Equity'
                         )
          AND [CloseDate] = '2021-11-26'
    ORDER BY [CloseDate], [ProductID];
    

    En esta consulta, utilizamos una LEFT JOIN con la tabla FXHistory para obtener las tasas adecuadas para cada ProductID. Luego, en la declaración SELECT, utilizamos una declaración CASE WHEN para agregar la tasa adecuada basada en las condiciones que especificaste. Por último, ordenamos los resultados por CloseDate y ProductID.

    Nota: la consulta anterior asume que solo hay un registro en la tabla FXHistory para cada combinación de BusinessDate e Identifier. Si este no es el caso, es posible que debas agregar una condición adicional a la declaración JOIN (por ejemplo, AND [FXHistory].[Rate] = MAX([FXHistory].[Rate])).

Comments are closed.