我正在用射频识别技术在VS2010中制作考勤管理系统,我所有的后台数据操作都是在SQL server2005中进行的,我知道基本的SQL,但我需要一些帮助来解决这个问题。
我有以下表格:
facultymasterdata数据
fname
fid
dept
title
phone
dob计时
fname
fid
intime_a
outtime_d
lunchout_b
lunchin_c原始转储
fid
timecode
currtime这里的数据是从我用vb.net编写的串口数据记录器程序中保存的,fid是RFID标签ID,时间码是A,B,C或D(用于识别时间为intime-A,lunchout-B,lunchin-C,outtime-D),currtime是当前系统时间。我通过微控制器获得RFID标签I,它根据实际按下的按钮添加时间代码。
我需要做的是对rawdumps中的所有数据进行排序,并根据时间码将其复制到timings中。时间代码为"A“的rawdumps中的fid和currtime字段以定时方式保存到字段intime_a中。以及来自facultymasterdata的对应于该fid的fname。
任何信息的帮助都将不胜感激。
非常感谢。
发布于 2012-04-21 13:58:08
我得到了解决方案,有人帮我解决了问题,我需要做的就是在排序时将列转换为行。我需要使用交叉表。
这就是我需要做的:
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-20 16:03:15
我不太清楚你所说的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-20 16:14:01
我可能会使用union select,这样会产生一个令人讨厌的大插入
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.currtimehttps://stackoverflow.com/questions/10242226
复制相似问题