2012-12-26 38 views
0

我试过以下。它不会插入任何新行,尽管没有行也是重复的。为什么?我做错了什么?任何帮助的赞赏如何在SQL Server 2005中只插入非重复的行?

 INSERT INTO TEMP_8 
    SELECT PASS_M, ENTRY_DT, EXIT_D, WORKED_HRS, 
      CONSECUTIVE_D = num -(SELECT max(num) 
            FROM TEMP_7 B 
            WHERE B.CONSEC <= A.CONSEC 
             AND B.GAP = 1 
             AND A.IC_N = B.IC_N) + 1 
    FROM TEMP_7 A 
    WHERE NOT EXISTS (SELECT * 
         FROM TEMP_8); 

更新:

PASS_M ENTRY_DT, EXIT_DT, WORKED_HRS 
peter 20/12/12 21/12/12 12 
Tom 20/12/12 21/12/12 10 
Tom 21/12/12 22/12/12 9 

这些都不重复。重复的是当name,entry_dtexit_dt完全相同。

+2

你如何定义一个重复的行? –

+2

在not exists部分需要一个where子句,如果temp_8根本不包含任何记录,那么只会返回true。另外如果你想得到一个确切的答案,你需要更新问题以上述评论。 – PeterJ

+0

谢谢,更新为建议 – 10e5x

回答

2
INSERT INTO TEMP_8 
SELECT PASS_M, ENTRY_DT, EXIT_D, WORKED_HRS, 
     CONSECUTIVE_D = num -(SELECT max(num) 
           FROM TEMP_7 B 
           WHERE B.CONSEC <= A.CONSEC 
            AND B.GAP = 1 
            AND A.IC_N = B.IC_N) + 1 
FROM TEMP_7 A 
WHERE NOT EXISTS (SELECT * 
        FROM TEMP_8 B 
        WHERE B.PASS_M = A.PASS_M 
        and B.ENTRY_DT = A.ENTRY_DT 
        and B.EXIT_D = A.EXIT_D); 
+0

谢谢它的作品:) – 10e5x

1

您需要过滤与在选择数据如下存在:

INSERT INTO TEMP_8 
SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, 
     CONSECUTIVE_D = num -(SELECT max(num) 
           FROM TEMP_7 B 
           WHERE B.CONSEC <= A.CONSEC 
            AND B.GAP = 1 
            AND A.IC_N = B.IC_N) + 1 
FROM TEMP_7 A 
WHERE NOT EXISTS (SELECT 1 
        FROM TEMP_8 T 
WHERE A.PASS_M=T.PASS_M AND A.ENTRY_DT=T.ENTRY_DT AND A.EXIT_DT=T.EXIT_DT); 
相关问题