我需要使用与以下查询相同的结果删除此表:
SELECT
T1.IdCli
,T1.IdType
,T1.DateInic
,T1.Num_Tel
,COUNT (*)
FROM dbo.Telphone T1
INNER JOIN dbo.Telphone T2
ON T1.IdCli= T2.IdCli
AND T1.DateInic= T2.DateInic
AND T1.IdType= T2.IdType
WHERE T1.Date <> '2100-12-31'
GROUP BY 1,2,3,4
HAVING COUNT (*) > 1
我该如何解决这个问题?
答案 0 :(得分:0)
/* Create a new table with a row number column that
resets over the unique values for the columns in the table. */
CREATE TABLE {DB}.Telphone1 AS
(SELECT T1.IdCli
, T1.IdType
, T1.DateInic
, T1.Num_Tel
, ROW_NUMBER() OVER
(PARTITION BY T1.IdCli,T1.IdType,T1.DateInic, T1.Num_Tel) AS RowID_
FROM dbo.Telphone T1) WITH DATA
PRIMARY INDEX({match PI of Telphone});
/* Show Duplicate records */
SELECT T1.IdCli
, T1.IdType
, T1.DateInic
, T1.Num_Tel
FROM {DB}.Telphone1 T1
WHERE RowID_ > 0;
/* Get rid of duplicates */
DELETE
FROM {DB}.Telphone1
WHERE RowID_ > 1;
/* Get rid of column used for duplicate check */
ALTER TABLE {DB}.Telphone1 DROP RowID_;
/* Rename tables and preserve original with duplicate records */
RENAME TABLE {DB}.Telphone AS {DB}.Telphone_bak;
RENAME TABLE {DB}.Telphone1 AS {DB}.Telphone;