1

microsoft Access Database私はこのように2つのテーブルを持っています

1.HR_Personnel

+-----+----------+----------------------+
| ID  | NIP      | Name                 |
+----------------+----------------------+
| 1   | 200      | Teguh                | 
| 2   | 201      | Supomo               | 
| 3   | 203      | DHINI ADHITYAS M     | 
| 4   | 204      | Dhani Amanda         | 
+-----+----------+----------------------+

TA_Record_Info

+---------+-----------------------+
| Per_Code| Date_Time             |
+---------+-----------------------+
| 3       | 2013-02-20 07:45:57   | 
| 2       | 2013-02-20 07:46:13   | 
| 1       | 2013-02-20 08:48:07   | 
| 1       | 2013-02-20 15:53:40   | 
| 3       | 2013-02-20 16:01:02   | 
| 2       | 2013-02-21 07:31:57   | 
| 3       | 2013-02-21 07:39:29   | 
| 3       | 2013-02-21 15:51:47   | 
| 2       | 2013-02-21 16:11:21   | 
| 2       | 2013-02-22 07:47:45   | 
| 1       | 2013-02-22 07:53:31   | 
| 3       | 2013-02-22 16:01:43   | 
| 2       | 2013-02-22 16:11:19   | 
| 1       | 2013-02-22 16:15:26   | 
+---------+-----------------------+

期待される結果編集

+-------+-----------------+-------------+-------------+-------------+
| NIP   | Nama            | adate       | InTime      | OutTime     |
+-------+-----------------+-------------+-------------+-------------+
| 201   | Teguh           | 2013-02-20  | 08:48:07    | 15:53:40    |
| 202   | Supomo          | 2013-02-20  | 07:46:13    | -           | 
| 203   | DHINI ADHITYAS M| 2013-02-20  | 07:45:57    | 16:01:02    |
| 204   | Dhani Amanda    | 2013-02-20  | -           | -           |
| 201   | Teguh           | 2013-02-21  | -           | -           |
| 202   | Supomo          | 2013-02-21  | 07:31:57    | 16:11:21    | 
| 203   | DHINI ADHITYAS M| 2012-08-21  | 07:39:29    | 15:51:47    |
| 204   | Dhani Amanda    | 2013-02-21  | -           | -           |
| 201   | Teguh           | 2012-08-22  | 07:53:31    | 16:15:26    |
| 202   | Supomo          | 2012-08-22  | 07:47:45    | 16:11:19    | 
| 203   | DHINI ADHITYAS M| 2012-08-22  | -           | 16:01:43    |
| 204   | Dhani Amanda    | 2013-02-22  | -           | -           |
+-------+-----------------+-------------+-------------+-------------+

私はこのクエリ編集を試しました

SELECT p.NIP AS NIP,
        p.Name AS Nama,
                                Format (a.Date_Time, 'yyyy-mm-dd') as adate,
                                IIF((Min(a.Date_Time) <> Max(a.Date_Time)),
                                    Format (Min(a.Date_Time), 'hh:mm:ss'),
                                    IIF( Format (Min(a.Date_Time), 'hh:mm:ss') < '12:00:00',
                                         Format (Min(a.Date_Time), 'hh:mm:ss'), 
                                        '-'
                                       )
                                   )as InTime,
                                IIF((Max(a.Date_Time) <> Min(a.Date_Time)),
                                    Format (Max(a.Date_Time), 'hh:mm:ss'),
                                    IIF( Format (Max(a.Date_Time), 'hh:mm:ss') > '12:00:00',
                                         Format (Max(a.Date_Time), 'hh:mm:ss'), 
                                         '-'
                                       )
                                    )as OutTime
                                FROM HR_Personnel AS p 
                                LEFT JOIN TA_Record_Info a 
                                ON p.ID = a.Per_Code  
                                GROUP BY p.Per_Code,
                                p.Per_Name,
                                         Format (a.Date_Time, 'yyyy-mm-dd')
                                Order BY Format (a.Date_Time, 'yyyy-mm-dd'),
                                            Right(p.Per_Code,2),
                                            p.Per_Name

しかし、結果は次のように表示されますEDIT

+-------+-----------------+-------------+-------------+-------------+
| NIP   | Nama            | adate       | InTime      | OutTime     |
+-------+-----------------+-------------+-------------+-------------+
| 204   | Dhani Amanda    |             |             | -           |
| 201   | Teguh           | 2013-02-20  | 08:48:07    | 15:53:40    |
| 202   | Supomo          | 2013-02-20  | 07:46:13    | -           | 
| 203   | DHINI ADHITYAS M| 2013-02-20  | 07:45:57    | 16:01:02    |
| 202   | Supomo          | 2013-02-21  | 07:31:57    | 16:11:21    | 
| 203   | DHINI ADHITYAS M| 2012-08-21  | 07:39:29    | 15:51:47    |
| 201   | Teguh           | 2012-08-22  | 07:53:31    | 16:15:26    |
| 202   | Supomo          | 2012-08-22  | 07:47:45    | 16:11:19    | 
| 203   | DHINI ADHITYAS M| 2012-08-22  | -           | 16:01:43    |
+-------+-----------------+-------------+-------------+-------------+

を使用して参加したままにしたために、クエリの結果が発生したと思います

ON p.ID=a.Per_Code

EDIT so teguh are not present at 2013-02-21 日付は表示されません。表は、2013 年 2 月 22 日から 2013 年 2 月 22 日まで欠席した Dhani Amanda のみを示しています。

従業員のルームメイト テーブルがすべての特定の日付に存在しないこと、または Intime と OutTime でマークされた日付が空であることを示したかっただけです。

最後に、クエリから何を変更する必要がありますか? あなたが私を助けてくれることを願っています。ありがとう。

アップデート

私は間違っていました。表の結果と期待される結果の表の間で逆さまに書きます。そして、結果の表は存在Teguhしない従業員として存在しません。説明を変更しました。そして、クエリで

SELECT p.NIP AS NIP,
        p.Name AS Nama,

によって変更

SELECT p.NIP AS NIP,
        p.Name AS Nama,

EDITタグで質問を編集しました。ありがとう。

4

2 に答える 2

1

次のコード行があります: Format (a.Date_Time, 'yyyy-mm-dd') as adate,

そして、テーブル a に日付が関連付けられていない人の日付を取得することを期待しています。これが機能する唯一の方法は、テーブル a から一意の日付を選択する新しいクエリ (または SELECT ステートメント) を作成し、それをテーブル p に結合しない場合です。

これを実行してみて、残りのクエリを作成できるかどうかを確認してください。私は仕事で少し忙殺されていますが、あなたならきっと最後までやり遂げることができるはずです。

SELECT QueryDate.ID, QueryDate.NIP, QueryDate.nama, QueryDate.adate, IIf((Min(TA_Record_Info.Date_Time)<>Max(TA_Record_Info.Date_Time)),Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss"),IIf(Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss")<"12:00:00",Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss"),'-')) AS InTime, IIf((Max(TA_Record_Info.Date_Time)<>Min(TA_Record_Info.Date_Time)),Format(Max(TA_Record_Info.Date_Time),"hh:mm:ss"),IIf(Format(Max(TA_Record_Info.Date_Time),"hh:mm:ss")>"12:00:00",Format(Max(TA_Record_Info.Date_Time),"hh:mm:ss"),'-')) AS OutTime
FROM QueryDate LEFT JOIN TA_Record_Info ON (QueryDate.adate=DateValue(TA_Record_Info.Date_Time)) AND (QueryDate.ID=TA_Record_Info.Per_Code)
GROUP BY QueryDate.ID, QueryDate.NIP, QueryDate.nama, QueryDate.adate;

以下で構成される QueryDate という別のクエリがあります。

SELECT HR_Personnel.ID, HR_Personnel.NIP, HR_Personnel.Name as nama, QDt.UniqueDate as adate
FROM HR_Personnel, (SELECT DateValue([Date_Time]) AS UniqueDate
FROM TA_Record_Info
GROUP BY DateValue([Date_Time])) AS QDt;

頑張れば、おそらく2つを組み合わせることができます。

于 2013-08-21T16:41:44.720 に答える
1

問題は解決しました。

このコードは、従業員が特定の日付に存在しないこと、または Intime と OutTime が空でマークされたすべての日付に存在しないことを示しています。

SELECT QueryDate.HR_Personnel.ID, 
    QueryDate.HR_Personnel.Per_Code, 
    QueryDate.HR_Personnel.Per_Name, 
    QueryDate.QDt.UniqueDate, 
    IIf((Min(TA_Record_Info.Date_Time)<>Max(TA_Record_Info.Date_Time)),Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss"),IIf(Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss")="",Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss"),IIf(Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss")<"12:00:00",Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss"),'-'))) AS InTime,
    IIf((Max(TA_Record_Info.Date_Time)<>Min(TA_Record_Info.Date_Time)),Format(Max(TA_Record_Info.Date_Time),"hh:mm:ss"),IIf(Format(Max(TA_Record_Info.Date_Time),"hh:mm:ss")="",Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss"),IIf(Format(Max(TA_Record_Info.Date_Time),"hh:mm:ss")>"12:00:00",Format(Min(TA_Record_Info.Date_Time),"hh:mm:ss"),'-'))) AS OutTimeFROM (
    SELECT HR_Personnel.ID, HR_Personnel.Per_Code, HR_Personnel.Per_Name, QDt.UniqueDate
    FROM HR_Personnel, (SELECT DateValue([Date_Time]) AS UniqueDate FROM TA_Record_Info GROUP BY DateValue([Date_Time])) AS QDt
)as QueryDate 
LEFT JOIN TA_Record_Info 
ON(QueryDate.QDt.UniqueDate=DateValue(TA_Record_Info.Date_Time)) AND(QueryDate.HR_Personnel.ID=TA_Record_Info.Per_Code)
GROUP BY QueryDate.HR_Personnel.ID, 
    QueryDate.HR_Personnel.Per_Code, 
    QueryDate.HR_Personnel.Per_Name, 
    QueryDate.QDt.UniqueDate
ORDER BY QueryDate.QDt.UniqueDate;

私の問題を解決するために時間をかけたいと思っているジョニー・ボーンズに感謝します。

于 2013-08-22T03:57:21.557 に答える