Tengo un sistema que vienen facturas con los valores en
DOLARES y a medida que se carga se crean los mismos
registros pero en EUROS y se saca el factor de conversión
de una moneda a la otra de la tabla VALORESCAMBIO (abajo
están los scripts).
El problema es que estos factores de cambio pueden
cambiar para el pasado entonces tengo que tener la
posibilidad de recalcular los registros ya generados.
Para lo que hago el Update de acá abajo pero cuando lo
ejecuto me da el error:
The table 'FACTURAS' is ambiguous.
Esto seguro que es porque hago un Join de Facturas (fac)
con Facturas (fac2) pero este JOIN es necesario!!! Cómo
hago entonces para que NO me de error?????
UPDATE FACTURAS
SET importe = fac2.importe * cam.factor_cambio
FROM
FACTURAS fac
INNER JOIN VALORESCAMBIO cam ON fac.MonedaID =
cam.MonedaIDOrigen and fac.fecha = cam.fecha
INNER JOIN FACTURAS fac2 ON fac.FacturaID =
fac2.FacturaID and
fac.fecha = fac2.fecha and fac.MonedaID <> 1 and
fac2.MonedaID = 1
WHERE
cam.MonedaIDDestino = 1
Script de tablas y carga de Valores de ejemplo:
CREATE TABLE [dbo].[VALORESCAMBIO] (
[MonedaIDOrigen] [int] NOT NULL ,
[MonedaIDDestino] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[factor_cambio] [numeric](18, 4) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[FACTURAS] (
[FacturaID] [int] NOT NULL ,
[MonedaID] [int] NOT NULL ,
[Fecha] [datetime] NOT NULL ,
[Importe] [numeric](18, 4) NOT NULL ,
[ClienteID] [int] NOT NULL
) ON [PRIMARY]
GO
Insert Into FACTURAS
values(12, 1, '01/12/2003', 25, 1)
Insert Into FACTURAS
values(12, 2, '01/12/2003', 31, 1)
Insert Into FACTURAS
values(21, 1, '05/12/2003', 10, 2)
Insert Into FACTURAS
values(21, 2, '05/12/2003', 18, 2)
Insert Into FACTURAS
values(58, 1, '09/12/2003', 40, 15000)
Insert Into FACTURAS
values(58, 2, '09/12/2003', 52, 15000)
Insert Into VALORESCAMBIO
values(2, 1,'01/12/2003', 2.3)
Insert Into VALORESCAMBIO
values(2, 1,'02/12/2003', 2.1)
Insert Into VALORESCAMBIO
values(2, 1,'03/12/2003', 2.4)
Insert Into VALORESCAMBIO
values(2, 1,'04/12/2003', 2.5)
Insert Into VALORESCAMBIO
values(2, 1,'05/12/2003', 2.0)
Insert Into VALORESCAMBIO
values(2, 1,'06/12/2003', 1.8)
Insert Into VALORESCAMBIO
values(2, 1,'07/12/2003', 2.5)
Insert Into VALORESCAMBIO
values(2, 1,'08/12/2003', 2.2)
Insert Into VALORESCAMBIO
values(2, 1,'09/12/2003', 2.25)
Leer las respuestas