XOÁ BỎ CÁC DÒNG TRÙNG

Do import hoặc lỗi nào đó, dẫn đến có hiện tượng 1 đối tượng được mở làm nhiều dòng danh mục.

Yêu cầu

  • Xác định các dòng bị trùng nhau theo thông tin: Ví dụ, Trùng đối tượng công nợ theo cột mã số thuế

  • Dồn dữ liệu phát sinh của các mã bị trùng về 1 mã

  • Xoá các dòng danh mục đã dồn

Hướng dẫn

  • Tạo ra bảng tạm cte để xác định các dòng trùng theo yêu cầu và đánh số thứ tự

  • Gộp dữ liệu các dòng stt> 1 về dòng có stt=1

  • Xoá các dòng stt > 1

// Tạo bảng tạm cte gộp yếu tố trùng, đánh số stt 
WITH cte AS (
    SELECT ma,ten,vattu,identitykey, 
        ROW_NUMBER() OVER (PARTITION BY ma,ten ORDER BY identitykey) row_num
    FROM vattu
    Where vattu<>0 and ma<>''
)
// select bảng cte để kiểm tra
--select * from cte

// tạo câu lệnh select kiểm tra
--select T1.*, T2.vattu as vattuGoc from (select * from cte where row_num>1) T1 inner join (select * from cte where row_num=1)T2 on T1.ma=T2.ma and T1.ten=T2.ten

// tạo câu lệnh update dồn dữ liệu
update T1 set T1.vattu= T2.vattuGoc
from
(select * from dulieuketoan where vattu<>0) T1
inner join 
(
	select b1.*, b2.vattu as vattuGoc 
	from
	(select * from cte where row_num>1) b1 
	inner join 
	(select * from cte where row_num=1)b2 
	on b1.ma=b2.ma and b1.ten=b2.ten
)T2 
on T1.vattu = T2.vattu

// xoá các dòng có row_num> 1
delete cte where row_num>1

Last updated