2014-12-05 55 views
-1

我需要相同的結果,刪除下面的查詢該表:刪除 - TERADATA GROUP BY

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
/* 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;