sql - solo - suprimir si se duplica crystal reports
SQL-Necesita encontrar registros duplicados pero EXCLUIR transacciones revertidas (1)
Qué tal si:
select dt, abs(qty), abs(val),
sum(case when reversal=''Y'' then -1 else 1 end) as count
from transactions
group by dt, abs(qty), abs(val)
having sum(case when reversal=''Y'' then -1 else 1 end) > 1;
Acabo de probarlo en Oracle y funciona:
create table transactions
( dt date
, qty number
, val number
, reversal varchar2(1)
);
insert into transactions values (to_date(''1/1/08'',''mm/dd/yy'') , 14 , 70.00 , ''N'');
insert into transactions values (to_date(''1/1/08'',''mm/dd/yy'') , 14 , 70.00 , ''N'');
insert into transactions values (to_date(''1/1/08'',''mm/dd/yy'') , -14 , -70.00 , ''Y'');
insert into transactions values (to_date(''2/1/08'',''mm/dd/yy'') , 17 , 89.00 , ''N'');
insert into transactions values (to_date(''2/15/08'',''mm/dd/yy'') , 18 , 95.00 , ''N'');
insert into transactions values (to_date(''2/15/08'',''mm/dd/yy'') , 18 , 95.00 , ''N'');
insert into transactions values (to_date(''3/1/08'',''mm/dd/yy'') , 11 , 54.00 , ''N'');
insert into transactions values (to_date(''3/1/08'',''mm/dd/yy'') , -11 , -54.00 , ''Y'');
insert into transactions values (to_date(''3/1/08'',''mm/dd/yy'') , 11 , 54.00 , ''N'');
insert into transactions values (to_date(''3/1/08'',''mm/dd/yy'') , 11 , 54.00 , ''N'');
insert into transactions values (to_date(''3/1/08'',''mm/dd/yy'') , 11 , 54.00 , ''N'');
SQL> select dt, abs(qty), abs(val),
2 sum(case when reversal=''Y'' then -1 else 1 end) as count
3 from transactions
4 group by dt, abs(qty), abs(val)
5 having sum(case when reversal=''Y'' then -1 else 1 end) > 1;
DT ABS(QTY) ABS(VAL) COUNT
----------- ---------- ---------- ----------
15-FEB-2008 18 95 2
01-MAR-2008 11 54 3
Tengo una tabla de transacciones que ocasionalmente tendrá entradas duplicadas. Si / Cuando un administrador encuentra estas entradas duplicadas, revertirán las transacciones, creando así un valor negativo (pero el duplicado original aún permanece debido a los requisitos reglamentarios). Me gustaría crear una consulta SQL (y usar Crystal Reports) para crear un informe para que los administradores encuentren fácilmente las transacciones duplicadas. Debido a la cantidad masiva de transacciones, me gustaría hacer que sea más fácil para ellos haciendo caso omiso de las transacciones que ya se han invertido.
Aquí hay un ejemplo de lo que me gustaría hacer:
Fecha de Transacción ; Cantidad de transacción; Valor de la transacción ; Inversión
1/1/08 ; 14 ; 70.00 ; N
1/1/08 ; 14 ; 70.00 ; N
1/1/08 ; -14 ; -70.00 ; Y
2/1/08 ; 17 ; 89.00 ; N
2/15/08 ; 18 ; 95.00 ; N
2/15/08 ; 18 ; 95.00 ; N
3/1/08 ; 11 ; 54.00 ; N
3/1/08 ; -11 ; -54.00 ; Y
3/1/08 ; 11 ; 54.00 ; N
3/1/08 ; 11 ; 54.00 ; N
3/1/08 ; 11 ; 54.00 ; N
Idealmente, si ejecutara mi consulta "deseada" en la tabla anterior, recibiría el siguiente resultado:
Fecha de Transacción ; Cantidad de transacción; Valor de la transacción ; Contar
2/15/08 ; 18 ; 95.00 ; 2
3/1/08 ; 11 ; 54.00 ; 3
¿Tiene sentido? Ya he descubierto cómo escribir la consulta para darme un recuento de duplicados, pero no puedo encontrar la manera de excluir los registros duplicados que ya se han "retirado". ¡Cualquier ayuda sería muy apreciada!