Удалить запись с одинаковым значением в другом столбце только один раз

Доброе утро, в триггере для вставки мне нужно удалить все записи, которые имеют значение больше 0 в vat, и в то же время удалить запись, не содержащую vat, из того же клиента и той же самой подпрограммы. (У него нет первичного ключа)

EJ:

Cliente | rut        | precio | ganado | iva    | fecha
────────┼────────────┼────────┼────────┼────────┼─────────
Diego   | 23423333-3 | 345344 | 345344 | 0      | 20160111
Diego   | 23423333-3 | 345344 | 345344 | 0      | 20160111
Diego   | 23423333-3 | 345344 | 345344 | 0      | 20160111
Diego   | 23423333-3 | 345344 | 0      | 345344 | 20160111
delete top (
  SELECT COUNT(*)
  FROM [dbo] as f 
  inner join inserted as d on (d.rut=f.rut)
  Where f.ganado in(select iva from Inserted) and f.nombre=d.nombre and d.fecha=f.fecha
)
from [dbo] 
from [dbo] as f
inner join inserted as d on (d.rut=f.rut)
Where f.ganado in(select iva from Inserted) and f.nombre=d.nombre and d.fecha=f.fecha

СЛЕДУЕТ: удалить строку с НДС и одну с той же колеей, именем, датой и выигранной ценой.

EJ:

Cliente | rut        | precio | ganado | iva | fecha
────────┼────────────┼────────┼────────┼─────┼─────────
Diego   | 23423333-3 | 345344 | 345344 | 0   | 20160111
Diego   | 23423333-3 | 345344 | 345344 | 0   | 20160111

Но это только удаляет стоимость без НДС, оставляя записи, заработанные без их удаления (1 на 1).

Спасибо заранее.

0
задан 23.03.2016, 16:22
1 ответ
DECLARE @ruc NVARCHAR(32), @Nombre  NVARCHAR(32), @fecha   NVARCHAR(32), @iva decimal , @ganado decimal  ,@precio decimal

 /*Eliminamos los registros con IVA mayor a 0*/
SELECT @ruc = rut, @Nombre = nombre, @fecha = fecha , @iva = iva, @ganado  = ganado    , @precio = precio
FROM inserted

DELETE FROM  dbo
WHERE nombre = @Nombre AND
      rut    = @ruc   AND
      iva    > 0


/*Para el paso dos depende. En sql server. La información ya esta insertada. 
  Por lo que al eliminar, eliminarias tambien el registro insertado. Debes distinguir los
  registros con una clave unica. Asi podrias aplicar esto*/

  DELETE FROM  dbo
WHERE nombre = @Nombre AND
      rut    = @ruc    AND
      ganado = @ganado AND
      precio = @precio AND
      fecha  = @fecha  AND
      id     < 15       /*Id insertado, eliminamos los registros que sean iguales y conservamos el ultimo insertado*/
0
ответ дан 24.11.2019, 14:42