0

私はVS2010でRFIDテクノロジーを使用して出席管理システムを作成し、SQL Server 2005ですべてのバックエンドデータ操作を行っています。基本的なSQLは知っていますが、この問題についてはサポートが必要です。

私は次のテーブルを持っています:

facultymasterdata

fname
fid
dept
title
phone
dob

タイミング

fname
fid
intime_a
outtime_d
lunchout_b
lunchin_c

rawdumps

fid
timecode
currtime

ここのデータは、vb.netで作成したシリアルポートデータロガープログラムから保存されます。fidはRFIDタグID、タイムコードはA、B、C、またはDです(時間をintime-A、lunchout-B、launchin-Cとして識別するため)。 、outtime-D)およびcurrtimeは、現在のシステム時刻です。物理的なボタンの押下に応じてタイムコードを追加するマイクロコントローラーを介してRFIDタグIDを取得します。

私がする必要があるのは、タイムコードに従ってすべてのデータを並べ替えてrawdumpsコピーすることです。タイムコードが「A」のフィールドとフィールドは、タイミングでフィールドに保存timingsfidcurrtimeます。また、に対応するから。rawdumpsintime_afnamefacultymasterdatafid

情報の助けをいただければ幸いです。

どうもありがとう。

4

3 に答える 3

0

私はおそらくユニオンセレクトを利用するでしょう、その結果、このような大きな厄介な挿入物になります

insert into timings
(fname,fid,intime_a,lunchout_b,lunchin_c, outtime_d)
select
    f.fname,
    f.fid,
    r.intime_a,
    r.lunchout_b,
    r.lunchin_c,
    r.outtime_d,
from
    facultymasterdata as f
inner join (
    select
        fid as fid,
        currtime as currtime,
        currtime as intime_a,
        null as lunchout_b,
        null as lunchin_c,
        null as outtime_d,
    from
        rawdumps
    where timecode = 'A'
    union select
        fid as fid,
        currtime as currtime,
        null as intime_a,
        currtime as lunchout_b,
        null as lunchin_c,
        null as outtime_d,
    from
        rawdumps
    where timecode = 'B'
    union select
        fid as fid,
        currtime as currtime,
        null as intime_a,
        null as lunchout_b,
        currtime as lunchin_c,
        null as outtime_d,
    from
        rawdumps
    where timecode = 'C'
    union select
        fid as fid,
        currtime as currtime,
        null as intime_a,
        null as lunchout_b,
        null as lunchin_c,
        currtime as outtime_d,
    from
        rawdumps
    where timecode = 'D'
    ) r on r.fid = f.fid
order by r.currtime
于 2012-04-20T08:14:00.617 に答える
0

[fid]フィールドと[curtime]フィールドのコードが「A」で[intime_a]に保存されているのか、正確にはわかりません。これは合計ですか?

これにより、正しい方向に進むことができます。

INSERT INTO timings(fname,fid,intime_a)
    SELECT a.fname, b.fid, b.curtime
    FROM facultymasterdata a, rawdumps b 
    WHERE a.fid = b.fid
    ORDER BY b.timecode;

編集:コメントの質問と回答の編集を読んだ後、この挿入を処理するためのトリガーを作成します。

于 2012-04-20T08:03:15.097 に答える
0

私は解決策を手に入れました、誰かが私を助けてくれました、私がする必要があるのはそれをソートしながら列を行に変換することでした。クロスタブを使用する必要がありました。

これは私がする必要があったことです:

SELECT F.fName, F.fID, 
MIN(CASE WHEN R.TimeCode = 'A' THEN CurrTime END) AS Intime_a,
MAX(CASE WHEN R.TimeCode = 'D' THEN CurrTime END) AS outtime_d,
MIN(CASE WHEN R.TimeCode = 'B' THEN CurrTime END) AS LunchOut_b,
MAX(CASE WHEN R.TimeCode = 'C' THEN CurrTime END) AS LunchIn_c
FROM dbo.facultymasterdata F LEFT JOIN dbo.rawdumps R ON F.fid = R.fid 
GROUP BY F.fid, F.fname 
于 2012-04-21T05:58:08.110 に答える