我需要在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你真的帮了我!!!
答案 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