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

Sql 我想根据需要比较另一个表中数据的条件更新列中的值,sql,oracle,calculated-columns,Sql,Oracle,Calculated Columns,我需要SQL中一个案例的帮助,所以如果表文档中其他列中的日期在4个月后的上方或下方,我必须在表客户机中用“上方”或“下方”填充一列差异。我试过这个 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,

我需要SQL中一个案例的帮助,所以如果表文档中其他列中的日期在4个月后的上方或下方,我必须在表客户机中用“上方”或“下方”填充一列差异。我试过这个

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
其中一些结果:

ID\u客户端数据 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”-非常愚蠢的错误


谢谢你的回答!你真的帮了我

您不需要加入表,而是需要检查是否有任何相关文档的数据从现在起超过4个月。似乎DOCUMENT.DATA也是一个varchar,并且该值是使用mm/dd/yyyy格式设置的,因此您需要将to_DATE函数的第二个参数更改为mm/dd/yyyy


如果同一个客户端的两个文档的时间都超过或少于4个月,那么应该将差异设置为什么?欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮{},以很好地格式化和语法突出显示它!Joachim Isaksson你是对的,我必须为一个客户的所有文档找到解决方案,如果有文档的数据之间的月数超过4个月,请在下面的列中表示差异,我假设DOCUMENT.DATA是varchar,而不是date。请尝试下面我的更新答案。这就是问题所在!非常感谢。我尝试过,但它说:ORA-00942:表或视图不存在现在它说:ORA-01779:无法修改映射到非键保留表的列可能这是因为我为每个客户端有多个文档,有时超过4个月,有时低于。。。我必须用另一种方法?是的,我想你是对的。如果每个客户有多个文档,那么将差异设置为“以下”的标准是什么?是否所有文档都需要比现在短4个月?是的,所有文档都必须短于4个月,如果有任何大于4个月的文档必须设置在上面是的,所有文档都必须短于4个月,如果有任何大于4个月的文档必须设置在上面我尝试了选择客户。ID_客户,MindDocument.DATA作为来自文档的数据,其中CLIENTS.ID_CLIENT=DOCUMENT.ID_CLIENT GROUP BY CLIENTS.ID_CLIENT,现在我有文档的最小数据…如果此数据大于4个月…我必须将此信息用于案例逻辑
 SELECT  CLIENTS.ID_CLIENT,MIN(DOCUMENT.DATA) AS "DATA"
    FROM DOCUMENT,CLIENTS
WHERE CLIENTS.ID_CLIENT=DOCUMENT.ID_CLIENT
GROUP BY CLIENTS.ID_CLIENT  
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 
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