如何让将这两条记录合并成一条记录,sqlserver2008

 我来答
匿名用户
2013-07-02
展开全部
CREATE TABLE  #temp (
  personname  varchar(10),
  swipingtime datetime,
  flag  varchar(10),
  rank  varchar(2),
  personid varchar(10)
);

-- 模拟上班,下班多次打卡的情况
INSERT INTO  #temp VALUES('张三', '2013-07-01 08:59:59', '上班打卡', 'd', '000001');
INSERT INTO  #temp VALUES('张三', '2013-07-01 09:00:01', '上班打卡', 'd', '000001');
INSERT INTO  #temp VALUES('张三', '2013-07-01 17:59:59', '下班打卡', 'd', '000001');
INSERT INTO  #temp VALUES('张三', '2013-07-01 18:00:01', '下班打卡', 'd', '000001');


-- 模拟多天的情况
INSERT INTO  #temp VALUES('李四', '2013-07-01 08:55:55', '上班打卡', 'd', '000002');
INSERT INTO  #temp VALUES('李四', '2013-07-01 18:05:05', '下班打卡', 'd', '000002');
INSERT INTO  #temp VALUES('李四', '2013-07-02 08:55:55', '上班打卡', 'd', '000002');
INSERT INTO  #temp VALUES('李四', '2013-07-02 18:05:05', '下班打卡', 'd', '000002');
go


SELECT
  personname,
  MIN( CASE WHEN flag='上班打卡' THEN swipingtime ELSE NULL END) AS [上班时间],
  MAX( CASE WHEN flag='下班打卡' THEN swipingtime ELSE NULL END) AS [下班时间]
FROM
  #temp
GROUP BY
  personname, Convert(varchar(20), swipingtime, 112);

personname 上班时间                    下班时间
---------- ----------------------- -----------------------
李四         2013-07-01 08:55:55.000 2013-07-01 18:05:05.000
张三         2013-07-01 08:59:59.000 2013-07-01 18:00:01.000
李四         2013-07-02 08:55:55.000 2013-07-02 18:05:05.000
警告: 聚合或其他 SET 操作消除了 Null 值。
更多追问追答
追问

我显示的怎么是分开的,

追答
你 执行的 SQL 贴出来看看啊。  只贴结果, 一点用没有啊。
我上面的例子, 是 表、数据、 查询sql、 查询结果都贴出来了啊。

你只贴错误结果, 难度要我去猜你的 SQL语句?
百度网友d2f3de142
2013-07-02 · TA获得超过186个赞
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:117万
展开全部
select personid,personname,
max(case when flag='上班打卡' then swipingtime else null end) as 上班时间,
max(case when flag='下班打卡' then swipingtime else null end) as 下班时间
group by personid,personname
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FD_ckx
2013-07-02
知道答主
回答量:13
采纳率:0%
帮助的人:1.9万
展开全部
内设系统更改一下就行了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2013-07-02 · TA获得超过6725个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5092万
展开全部
合并成什么样子呢?
追问
显示成某个人一天的打开情况,
姓名,上班时间,下班时间
追答

你确保数据每个人都只有上班打卡跟下班打卡两条数据吗

如果确定的话,可以拆开来匹配,如

select * from tb as a full join tb as b on a.personid=b.personid
and left(a.swipingtime,10)=left(b.swipingtime,10)
and a.flag='上班打卡' and b.flag='下班打卡'

select的输出列,自己再分

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式