-1

私は、in withと forのフラグを設定して、時間と時間外に保存したattan、出席の 名前のテーブルと列の名前を持つ sql クエリを持っています。S_TIMEIO

今、私は旗を使って時間に間に合うようにしようとしています。クエリを作成しましたが、このクエリの結果が間違った意味を持っています。

これが私のクエリです

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() を使用して、「from」に「date」部分のみを含めることができます。

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

  3. いずれにせよ、サブクエリで取得する (および取得しない) 行を確認すると、完全なクエリの何が問題なのかがわかります。

見つけたものを投稿してください!

于 2012-07-23T04:47:42.357 に答える