规则:在年份中,如果有多行类型(3,4),状态=' a'和type = 1,状态=' a'对于雇主,我们需要保持type = 1状态=' a'在雇主的年度内,其余部分应删除
这是表格EMP
EMPID YEARQUARTER TYPE STATUS
105 20021 3 A
105 20021 1 A
106 20091 4 A
106 20091 1 A
107 20101 4 A
107 20101 1 B
107 20101 2 A
108 20111 3 A
108 20111 1 A
108 20111 2 B
109 20131 3 A
109 20131 1 A
109 20131 1 A
删除后,EMP表应保留:
EMPID YEARQUARTER TYPE STATUS
105 20021 1 A
106 20091 1 A
107 20101 4 A
107 20101 1 B
107 20101 2 A
108 20111 1 A
108 20111 2 B
109 20131 1 A
109 20131 1 A
我试图使用此声明,但它没有获得所需的结果。
DELETE e1
FROM
EMP e1
WHERE
EXISTS (
SELECT
*
FROM
EMP e2
WHERE
e1.EMPID = e2.EMPID
AND e1.yearquarter = e2.yearquarter
AND e2.[status] = 'A'
AND E2.[type] IN (3,4)
)
执行此操作后,表中的所有行都将被删除。
答案 0 :(得分:1)
您应该检查是否要删除E1数据集上的类型3和4,而不是E2数据集。
DELETE E1
FROM
EMP E1
WHERE
E1.TYPE IN (3,4)
AND E1.STATUS = 'A'
AND EXISTS (
SELECT
*
FROM
EMP E2
WHERE
E2.EMPID = E1.EMPID
AND E2.YEARQUARTER = E1.YEARQUARTER
AND E2.TYPE = 1
AND E2.STATUS = 'A'
)
答案 1 :(得分:0)
@Somasekhar Ghanta,
您的要求的解决方案是
DELETE FROM Yearquarter AS tbl WHERE tbl.TYPE IN(3,4) AND tbl.Status = 'a'
另请注意,您的OUTPUT有1行,类型4和状态A: 107 20101 4 A
还要注意状态的大小写。