oracle sql查询生成一些意想不到的结果

时间:2012-07-23 04:39:05

标签: sql oracle

我有一个sql查询,其中我有一个名为attan的表用于出勤和列名 S_TIME我在IO

中设置了标记为in的时间和时间

现在我正在尝试使用旗帜及时和时间。我写了一个查询,但是这个查询的结果有些错误。

这是我的查询

SELECT X.AC_NO, X.IN_TIME, Y.OUT_TIME, X.S_DTE, X.CHK_IN, Y.CHK_OUT
  FROM (SELECT A.AC_NO, A.S_TIME IN_TIME, A.AC_CHECKTYPE CHK_IN, A.S_DTE
          FROM ATTN A
         WHERE A.AC_CHECKTYPE = 'I' AND A.S_DTE = :P_DTE) X,
       (SELECT B.AC_NO, B.S_TIME OUT_TIME, B.AC_CHECKTYPE CHK_OUT
          FROM ATTN B
         WHERE B.AC_CHECKTYPE = 'O' AND B.S_DTE = :P_DTE) Y
 WHERE X.AC_NO = Y.AC_NO(+)

通过这个查询,我总能获得所有员工的记录数量,并且只能获得2个具有时间的reocrds。

而在表格中有234个人在进入,256个人在外,但结果与数据不匹配。

如果我的查询中有任何问题,请任何人帮助我。

1 个答案:

答案 0 :(得分:0)

建议:

  1. 运行子选择,看看你是否得到了你期望的所有行,有没有“A.S_DTE =:P_DTE”日期过滤器:

    SELECT A.AC_NO, A.S_TIME IN_TIME, A.AC_CHECKTYPE CHK_IN, A.S_DTE FROM ATTN A WHERE A.AC_CHECKTYPE = 'I' AND A.S_DTE = :P_DTE

  2. 我的第一个猜测是,你可能有一个日期时间,除非小时/分钟/秒与完全匹配,否则你将无法获得该行。您可以使用to_char()在“from”中只包含“date”部分:

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:204714700346328550

  3. 在任何情况下,查看您执行(而不是)进入子查询的行应该会显示完整查询的错误。

  4. 请回复你找到的内容!