-1

我有一个 sql 查询,其中我有一个以attan考勤命名的表和一个名为列的列 S_TIME,我在其中存储了 time 和 out time,并设置了 in withI和 forO

现在,我正在尝试使用标志来赶上和下班。我写了一个查询,但是这个查询的结果有一些错误的意义。

这是我的查询

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 个没有时间的记录。

而在表中,有 234 名员工加入,256 名退出,但结果与数据不符。

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

4

1 回答 1

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() 在“发件人”中仅包含“日期”部分:

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

  3. 在任何情况下,查看您在子查询中执行(和不执行)哪些行应该会告诉您完整查询有什么问题。

请发回你找到的东西!

于 2012-07-23T04:47:42.357 回答