首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将另一个表中的数据插入到表中,同时根据字段进行排序

将另一个表中的数据插入到表中,同时根据字段进行排序
EN

Stack Overflow用户
提问于 2012-04-20 15:46:21
回答 3查看 778关注 0票数 0

我正在用射频识别技术在VS2010中制作考勤管理系统,我所有的后台数据操作都是在SQL server2005中进行的,我知道基本的SQL,但我需要一些帮助来解决这个问题。

我有以下表格:

facultymasterdata数据

代码语言:javascript
复制
fname
fid
dept
title
phone
dob

计时

代码语言:javascript
复制
fname
fid
intime_a
outtime_d
lunchout_b
lunchin_c

原始转储

代码语言:javascript
复制
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中的fidcurrtime字段以定时方式保存到字段intime_a中。以及来自facultymasterdata的对应于该fidfname

任何信息的帮助都将不胜感激。

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-21 13:58:08

我得到了解决方案,有人帮我解决了问题,我需要做的就是在排序时将列转换为行。我需要使用交叉表。

这就是我需要做的:

代码语言:javascript
复制
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 
票数 0
EN

Stack Overflow用户

发布于 2012-04-20 16:03:15

我不太清楚你所说的fid和curtime字段的代码是"A“,并保存在intime_a中。这是一个和吗?

这应该会让你走上正轨。

代码语言:javascript
复制
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;

编辑:在阅读您在评论中对问题和回复所做的编辑后,我将编写一个触发器来处理此插入操作。

票数 0
EN

Stack Overflow用户

发布于 2012-04-20 16:14:01

我可能会使用union select,这样会产生一个令人讨厌的大插入

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10242226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档