检查来自不同表的2个日期的相等性时出错

时间:2016-12-03 14:08:33

标签: sql oracle

我必须检查table1中的日期(我必须添加一个月)是否与table2中的日期相同。这些表是通过(id_ap)连接的,我得到错误"不是表达式的分组"

table1(id_ap,年,月)〜月份和年份是数字

table2(id_ap,data)

SELECT ADD_MONTHS(TO_DATE(TO_CHAR(table1.year, '9999') || TO_CHAR(table1.month, 'FM00') || '01', 'YYYYMMDD'),1)AS "Date table1", table2.data, table2.id_ap
FROM table1 join table2
ON table1.id_ap = table2.id_ap
//Group by table2.data,table1.id_ap    -- I tried both with and without group by, but same error
HAVING ADD_MONTHS(TO_DATE(TO_CHAR(table1.year, '9999') || TO_CHAR(table1.month, 'FM00') || '01', 'YYYYMMDD'),1) = table2.data

1 个答案:

答案 0 :(得分:1)

也许这就是你想要的:

SELECT table2.data, table2.id_ap
FROM table1 JOIN
     table2
     ON table1.id_ap = table2.id_ap AND
        ADD_MONTHS(TO_DATE(TO_CHAR(table1.year, '9999') || TO_CHAR(table1.month, 'FM00') || '01', 'YYYYMMDD'), 1) = table2.data
GROUP BY table2.data, table1.id_apgroup;

注意:

  • join条件应该放在on子句中。不是having子句(特别是),通常不在where子句中。
  • 您只需要table2.data。您的join条件保证它们是相同的。
  • 可以将整个表达式放在group by中。但为什么要这么麻烦?您的值为table2