Verificar si tengo registro duplicado con valores en dólares?????

15/10/2003 - 23:47 por marcelo | Informe spam
Todos los días me vienen facturas que pueden estar en
distintas Monedas para lo cual tengo un campo
CodigoMoneda que me indica en que Moneda están los
importes y si los importes están en una Moneda distinta a
dólares lo que hago es crear un nuevo registro con código
de Moneda igual a 1 que es "dolar" y pongo los importes
en dólares, para lo cual accedo a una tabla
(VALORESCAMBIO) que me da la conversión entre dólares y
otras monedas.
Para lo cual cómo medida de control quiero hacer un query
para verificar que se han hecho traspaso de Moneda para
todos los registros que vienen <> 1 (dólar) .
Cómo hago para saber si se creo un registro con
CodigoMoneda = 1 por cada uno que me vienen con
CodigoMoneda <> a 1 siendo IDFactura e IDSucursal las
claves que hacen única cada Factura.
Se puede hacer esto????

Preguntas similare

Leer las respuestas

#1 Javier Loria
16/10/2003 - 00:37 | Informe spam
Hola Marcelo:
Seria mucho mas facil si nos envias el codigo de creacion de las tablas.
Tal vez la consulta que deseas es:
/* Codigo sin Probar */
SELECT F.IdFactura, F.IdSucursal, F.Importe
FROM Facturas AS F LEFT JOIN Facturas G ON
F.IdFactura=G.IdFactura
AND F.IdSucursal=G.IdSucursal
AND F.Moneda<>1
AND G.Moneda=1
WHERE G.IdSucursal IS NULL
/* Fin Codigo sin Probar */

Me quedan algunas dudas del diseno de las Tablas, pero voy a asumir que
es solamente un lugar temporal de limpieza de datos para cargar un OLAP o
algun sistema de reportes, ya que si no te sugiero te replantees el diseno.

Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
marcelo escribio:
Todos los días me vienen facturas que pueden estar en
distintas Monedas para lo cual tengo un campo
CodigoMoneda que me indica en que Moneda están los
importes y si los importes están en una Moneda distinta a
dólares lo que hago es crear un nuevo registro con código
de Moneda igual a 1 que es "dolar" y pongo los importes
en dólares, para lo cual accedo a una tabla
(VALORESCAMBIO) que me da la conversión entre dólares y
otras monedas.
Para lo cual cómo medida de control quiero hacer un query
para verificar que se han hecho traspaso de Moneda para
todos los registros que vienen <> 1 (dólar) .
Cómo hago para saber si se creo un registro con
CodigoMoneda = 1 por cada uno que me vienen con
CodigoMoneda <> a 1 siendo IDFactura e IDSucursal las
claves que hacen única cada Factura.
Se puede hacer esto????
Respuesta Responder a este mensaje
#2 Liliana Sorrentino
16/10/2003 - 20:09 | Informe spam
Marcelo,

Por lo que entiendo de tu situación, además de Factura y Sucursal,
necesitarás Moneda en la clave de tu tabla, sino, será imposible que
insertes la información con otra Moneda.
¿Será necesario que tengas toda la información de cada factura, duplicada en
la misma tabla? Es posible que guardar el valor del dólar como un dato más
en cada fila sea suficiente, y modifiques ese valor cuando cambie la
cotización, así a vuelo de pájaro, me parece más simple.
De todas maneras, teniendo en cuenta el código de Javier te mando esto,
sugiriéndote que reveas el diseño de tu BD.

DROP TABLE Facturas
CREATE TABLE Facturas
(IDFactura smallint,
IDSucursal smallint,
Moneda smallint,
Importe dec(10,2),
Fecha datetime,
CONSTRAINT Facturas_PK PRIMARY KEY (IDFactura, IDSucursal, Moneda))

INSERT Facturas
SELECT 1, 1, 2, 10, '20030101' UNION
SELECT 2, 1, 2, 20, '20030101' UNION
SELECT 3, 1, 3, 10, '20030101' UNION
SELECT 4, 1, 3, 20, '20030102' UNION
SELECT 5, 1, 2, 10, '20030102'

DROP TABLE ValoresCambio
CREATE TABLE ValoresCambio
(CodMonedaOrigen smallint,
CodMonedaDestino smallint,
Valor_cambio dec(10,2))
INSERT ValoresCambio
SELECT 2, 1, 2.8 UNION
SELECT 3, 1, 3

dólares
SELECT F.IdFactura, F.IdSucursal, F.Importe
FROM Facturas AS F
LEFT JOIN Facturas G ON F.IdFactura=G.IdFactura
AND F.IdSucursal=G.IdSucursal
AND F.Moneda<>1
AND G.Moneda=1
WHERE G.IdSucursal IS NULL

INSERT Facturas
select F.IdFactura, F.IdSucursal, 1, F.Importe * Valor_cambio, f.Fecha
FROM Facturas AS F
LEFT JOIN Facturas G ON F.IdFactura=G.IdFactura
AND F.IdSucursal=G.IdSucursal
AND F.Moneda<>1
AND G.Moneda=1
INNER JOIN ValoresCambio ON CodMonedaOrigen = F.Moneda AND CodMonedaDestino
= 1
WHERE G.IdSucursal IS NULL

SELECT * FROM facturas

UPDATE ValoresCambio
SET Valor_cambio = 4
WHERE CodMonedaOrigen = 3 AND CodMonedaDestino = 1

UPDATE Facturas
SET Importe = ISNULL((SELECT Importe * Valor_cambio
FROM Facturas
INNER JOIN ValoresCambio ON CodMonedaOrigen = Moneda AND
CodMonedaDestino = 1
WHERE IdFactura=G.IdFactura
AND IdSucursal=G.IdSucursal
AND Moneda<>1
AND Fecha BETWEEN '20030102' AND '20030102'), Importe)
FROM Facturas AS G
WHERE G.Moneda = 1

SELECT * FROM Facturas

"marcelo" escribió en el mensaje
news:132101c39365$ecd507f0$
Todos los días me vienen facturas que pueden estar en
distintas Monedas para lo cual tengo un campo
CodigoMoneda que me indica en que Moneda están los
importes y si los importes están en una Moneda distinta a
dólares lo que hago es crear un nuevo registro con código
de Moneda igual a 1 que es "dolar" y pongo los importes
en dólares, para lo cual accedo a una tabla
(VALORESCAMBIO) que me da la conversión entre dólares y
otras monedas.
Para lo cual cómo medida de control quiero hacer un query
para verificar que se han hecho traspaso de Moneda para
todos los registros que vienen <> 1 (dólar) .
Cómo hago para saber si se creo un registro con
CodigoMoneda = 1 por cada uno que me vienen con
CodigoMoneda <> a 1 siendo IDFactura e IDSucursal las
claves que hacen única cada Factura.
Se puede hacer esto????
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida