如何让将这两条记录合并成一条记录,sqlserver2008
4个回答
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语句?
展开全部
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
max(case when flag='上班打卡' then swipingtime else null end) as 上班时间,
max(case when flag='下班打卡' then swipingtime else null end) as 下班时间
group by personid,personname
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
合并成什么样子呢?
追问
显示成某个人一天的打开情况,
姓名,上班时间,下班时间
追答
你确保数据每个人都只有上班打卡跟下班打卡两条数据吗
如果确定的话,可以拆开来匹配,如
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的输出列,自己再分
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询