我有一个sql查询,其中我有一个名为attan
的表用于出勤和列名
S_TIME
我在I
和O
现在我正在尝试使用旗帜及时和时间。我写了一个查询,但是这个查询的结果有些错误。
这是我的查询
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个人在外,但结果与数据不匹配。
如果我的查询中有任何问题,请任何人帮助我。
答案 0 :(得分:0)
建议:
运行子选择,看看你是否得到了你期望的所有行,有没有“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
我的第一个猜测是,你可能有一个日期时间,除非小时/分钟/秒与完全匹配,否则你将无法获得该行。您可以使用to_char()在“from”中只包含“date”部分:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:204714700346328550
在任何情况下,查看您执行(而不是)进入子查询的行应该会显示完整查询的错误。
请回复你找到的内容!