我想根据需要比较来自另一个表的数据的条件更新列中的值

时间:2014-10-04 06:40:33

标签: sql oracle calculated-columns

我需要在SQL中的一个案例中提供帮助,因此如果表格中其他列中的日期 - DOCUMENT高于或低于4个月,我必须在表格CLIENTS中填写一列DIFFERENCE与“Above”或“Below” 。我试过这个

UPDATE CLIENTS
SET DIFFERENCE = CASE WHEN MONTHS_BETWEEN(TO_DATE((SELECT DATA FROM DOCUMENT, CLIENTS WHERE DOCUMENT.ID_CLIENT=CLIENTS.ID_CLIENT ),'DD.MM.YYYY'),TO_DATE(SYSDATE,'DD.MM.YYYY')) < 4 THEN 'Below' ELSE 'Above' END

但它会返回很多值,所以我尝试加入表格和

UPDATE CLIENTS
SET DIFFERENCE = CASE WHEN MONTHS_BETWEEN(TO_DATE(DATA,'DD.MM.YYYY'),TO_DATE(SYSDATE,'DD.MM.YYYY')) < 4 THEN 'Below' ELSE 'Above' END
FROM CLIENTS  JOIN DOCUMENT
ON DOCUMENT.ID_CLIENT=CLIENTS.ID_CLIENT

但是这次说没有正确结束。 我正在使用Oracle数据库。 如果你看到了答案,请写信给我!

提前谢谢!

 SELECT  CLIENTS.ID_CLIENT,MIN(DOCUMENT.DATA) AS "DATA"
    FROM DOCUMENT,CLIENTS
WHERE CLIENTS.ID_CLIENT=DOCUMENT.ID_CLIENT
GROUP BY CLIENTS.ID_CLIENT  

以及一些结果:

ID_CLIENT数据 54 01/23/2014 57 01/23/2014 78 01/23/2014 87 01/24/2014 91 01/24/2014


我找到了解决方案,

UPDATE CLIENTS
SET DIFFERENCE = CASE WHEN MONTHS_BETWEEN(TO_DATE((SELECT MIN(DATA) FROM DOCUMENT, CLIENTS WHERE DOCUMENT.ID_CLIENT=CLIENTS.ID_CLIENT),'MM.DD.YYYY'),TO_DATE(SYSDATE,'MM.DD.YYYY')) < 4 THEN 'Below' ELSE 'Above' END 

错误是'MM.DD.YYYY'......首先我使用'DD.MM.YYYY' - 非常愚蠢的错误!

感谢所有答案! ekad你真的帮了我!!!

1 个答案:

答案 0 :(得分:0)

您需要使用DATA检查是否存在与EXISTS相关的文档,而不是加入表格。 DOCUMENT.DATA似乎是一个varchar,并且使用mm / dd / yyyy格式设置了值,因此您需要将TO_DATE函数的第二个参数更改为MM/DD/YYYY

UPDATE CLIENTS
SET DIFFERENCE = CASE WHEN EXISTS
                 (SELECT 1 FROM DOCUMENT
                  WHERE ID_CLIENT = CLIENTS.ID_CLIENT
                  AND MONTHS_BETWEEN(TO_DATE(DATA,'MM/DD/YYYY'),SYSDATE) > 4) 
                 THEN 'Above' 
                 ELSE 'Below' END