2

un agrado saludar. Favor ayuda/orientación como obtener este resultado deseado :

TABLA MONTO:

NOMBRE  MONTO
 A1     100   
 A2     300
 A3     100
 A4     200

TABLA OPERACIONES :

NOMBRE     OPERACION
 A1       OPERACION 1
 A1       OPERACION 2
 A1       OPERACION 3
 A1       OPERACION 4 
 A2       OPERACION 1
 A2       OPERACION 2
 A3       OPERACION 3

TABLA DESEADA :

NOMBRE   OPERACION     VALOR MONTO 
A1       OPERACION 1     100
A1       OPERACION 2     NULL
A1       OPERACION 3     NULL
A1       OPERACION 4     NULL
A2       OPERACION 1     300
A2       OPERACION 2     NULL
A2       OPERACION 3     NULL

En la tabla deseada necesito vincular el monto de cada nombre a la primera operación, pensando que pueden ser muchas operaciones solo debe asignárselo a la primera operación, luego a las operaciones siguientes para el mismo nombre debe ser null o cero.

Desde ya les agradezco su apoyo, gracias.

2 Answers2

0

Los puedes resolver con un CASE para indicar en que fila iría el MONTO, en tu ejemplo parece que son aquellas filas donde OPERACION = 'OPERACION 1'

SELECT O.NOMBRE,
       O.OPERACION
       CASE O.OPERACION = 'OPERACION 1' THEN MONTO ELSE NULL END AS MONTO
       FROM OPERACIONES O
       LEFT JOIN MONTO M
            ON M.NOMBRE = O.NOMBRE
jachguate
  • 25,659
  • 7
  • 35
  • 61
Patricio Moracho
  • 54,367
  • 12
  • 35
  • 68
0

Asumiendo que las operaciones no iniciarán necesariamente en 'OPERACION 1', sino que podrían tener otro valor, la siguiente consulta te asocia el valor a la operación más baja que se encuentre:

;with
OperacionNumerada as (
select   op.nombre
       , op.operacion
       , row_number() over (partition by nombre order by operacion) NumFila
  from Operacion op
)
select   op.Nombre
       , op.operacion
       , m.monto
  from OperacionNumerada op
       left join Monto m on m.nombre = op.nombre and op.NumFila = 1
 order by op.Nombre, op.NumFila;

Para hacerlo, primero calculo el número de fila que corresponde a cada operación y luego hago un left join de este resultado con la tabla monto solo para las filas que tienen el número 1, que representa la primera operación encontrada.

El resultado obtenido es:

Nombre  operacion       monto
A1      OPERACION 1     100
A1      OPERACION 2     NULL
A1      OPERACION 3     NULL
A1      OPERACION 4     NULL
A2      OPERACION 1     300
A2      OPERACION 2     NULL
A3      OPERACION 3     100

(7 rows affected)
jachguate
  • 25,659
  • 7
  • 35
  • 61