Tabla Rate:

Fees | Region  | Rate
-----+---------+---------
 A1  | Intra   | 0.00015   
 A2  | Intra   | 0.000325   
 A3  | Inter   | 0.000025   
 A4  | Inter   | 0.015  

Tabla Amount:

Region | Amount | A1 | A2 | A3 | A4
-------+--------+----+----+----+----
Intra  | $10    |  ? |  ? |  ? |  ?
Intra  | $11    |  ? |  ? |  ? |  ?
Inter  | $12    |  ? |  ? |  ? |  ?
Inter  | $13    |  ? |  ? |  ? |  ?

Cualquier ayuda servirá, estoy luchando para escribir la declaración del caso que actualizará la tabla usando las diferentes tasas de la tabla 1.

He intentado:

Update a
set A.A1 = Amount * R.Rate
from dbo.Amount as A 
inner join dbo.Rate R where R.Region = A.region

Quiero que la tasa aplicada sea la Tasa A1 y la Región sea inter / Intra dependiendo de la Región en la tabla Monto

Update a
set A.A2 = Amount * R.Rate
from dbo.Amount as A 
inner join dbo.Rate R where R.Region = A.region

Quiero que la tasa aplicada sea la Tasa A2 y la Región sea inter / Intra dependiendo de la Región en la tabla de Cantidad), etc.

Por favor, ayuda

sql
0
Nugeswale 18 ago. 2016 a las 22:05

2 respuestas

La mejor respuesta

Aquí hay una forma de hacerlo

Update a
set 
A.A1 = Amount* R1.Rate
,A.A2 = Amount* R2.Rate
,A.A3 = Amount* R3.Rate
,A.A4 = Amount* R4.Rate
from dbo.Amount as A 
inner join dbo.Rate R1 
on R1.Region = A.region and r1.fees = 'A1'
inner join dbo.Rate R2 
on R2.Region = A.region and r2.fees = 'A2'
inner join dbo.Rate R3 
on R3.Region = A.region and r3.fees = 'A3'
inner join dbo.Rate R4 
on R4.Region = A.region and r4.fees = 'A4'
1
Kostya 18 ago. 2016 a las 19:18

Supongo que así es como se relacionan sus tablas.

update Amount
set
    A1 = Amount * (select Rate from Rate where Region = Amount.Region and Fees = 'A1'),
    A2 = Amount * (select Rate from Rate where Region = Amount.Region and Fees = 'A2'),
    A3 = Amount * (select Rate from Rate where Region = Amount.Region and Fees = 'A3'),
    A4 = Amount * (select Rate from Rate where Region = Amount.Region and Fees = 'A4')

Una de las ventajas de usar subconsultas es que obtendrá un error si devuelve más de una fila. Hay razones para evitar la sintaxis update ... from .... Según los datos de muestra, parece que tendrá valores nulos, por lo que querrá usar outer join en lugar de inner join si elige hacerlo de esa manera.

1
shawnt00 18 ago. 2016 a las 19:49