2014-10-04 59 views
0

我需要SQL中的一个案例的帮助,所以我必须在表CLIENTS中的“Above”或“Below”上填写一列DIFFERENCE ,如果表中其他栏中的日期 - DOCUMENT从现在起高于或低于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 

但它返回很多价值,所以我试图JOIN表和

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 DATA 54 2014年1月23日 57 2014年1月23日 78 2014年1月23日87 2014年1月24日 91 01 /二千○十四分之二十四


我发现该溶液中,

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

几个月为同一个客户端,应该设置“差异”? – 2014-10-04 06:48:31

+0

欢迎使用StackOverflow:如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)以精确地格式化和语法突出它! – 2014-10-04 06:54:14

+0

Joachim Isaksson你是对的,我必须找到一个客户的所有文件的解决方案,如果有文件的数据之间的月份是从现在开始超过4个月,在列中说差异 - 在下面的其他部分 – Alex1 2014-10-04 08:12:18

回答

0

除了加入表格,您需要检查是否有任何相关文件DATA从现在起使用EXISTS超过4个月。这似乎也DOCUMENT.DATA是一个varchar和值是使用毫米/ dd/yyyy格式设定,所以你需要的,如果有更多的文档和小于4 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 
+0

我试过,但它说:ORA-00942:表或视图不存在 – Alex1 2014-10-04 08:02:48

+0

请尝试更新的答案。 – ekad 2014-10-04 08:10:54

+0

现在它说:ORA-01779:不能修改映射到非保存键的表的列可能这是因为我为每个客户端有多个文档,有时它超过4个月,有时低于...而我必须使用另一种解决方案? – Alex1 2014-10-04 12:53:40

相关问题