在日期列中验证没有值的人

时间:2012-03-20 17:51:19

标签: oracle plsql oracle11g

我有几个员工的桌子。它们具有以下列empid,datecolumn1,is_valid。

很少有员工在表中有多个记录。如果员工在表中有多条记录,我希望在以下条件下“使其中一条记录无效”: 1.如果员工在表中有多个记录,则datecolumn1中没有值的记录有效(update is_valid为1),datecolumn1中值为value的记录无效(update is_valid为0)。

我如何做到这一点?

2 个答案:

答案 0 :(得分:2)

正如Ben指出的那样,你已经声明如果datecolumn1为NULL,你希望is_valid列设置为0和1.假设你修复了这个问题,你可能需要调整这个CASE声明取决于您决定的方式是正确的。

UPDATE employees 
   SET is_valid = (CASE WHEN datecolumn1 IS NULL
                        THEN 1
                        ELSE 0
                    END)
 WHERE empid IN (SELECT e.empid
                   FROM employees e
                  GROUP BY emempid
                 HAVING COUNT(*) > 1)

答案 1 :(得分:1)

创建一个临时表,并使用GROUP BY员工ID(或任何您的唯一标识符)通过原始表上的SELECT填充它。创建第二个临时表,并通过原始表上的SELECTING填充它,并排除与分组表中的行匹配的所有行。现在,您有一个只包含多行人的表。从原始表中,在所有与第二个登台表匹配员工ID的行上将is_valid设置为0,并且也没有datecolumn1(或者也许还有datecolumn1 - 在写这篇文章时你的问题有点不清楚。)和is_valid到1对其他人。完成后,删除临时表,您应该拥有所需的内容。

您也可以通过一个更复杂的多选调用来完成此操作,但我发现当事情变得复杂时使用登台表会很有帮助。