问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql 行转列,如图所示是每个人每天的考勤打卡数据,怎样可以把每个人的刷卡时间横着显示

发布网友 发布时间:2022-05-19 23:00

我来回答

4个回答

热心网友 时间:2023-10-19 19:12

如果是sqlserver你需要先建立一个函数像这样

CREATE FUNCTION [dbo].[JoinString]
(
@time varchar(100),
@name varchar(100)
)
RETURNS varchar(2000)
AS
BEGIN
DECLARE @tmp varchar(1000)
set @tmp=''

SELECT @tmp=@tmp+','+sj from (
select 人员姓名,CONVERT(varchar(100), 刷卡日期时间, 23) as rq,
  CONVERT(varchar(100), 刷卡日期时间, 24) as sj
   from 你的表名
)t 
where 人员姓名 = @name and rq = @time

RETURN @tmp

END

然后就可以调用了,如下

  select 人员姓名,rq,dbo.JoinString(rq,人员姓名) from
  (
select 人员姓名,CONVERT(varchar(100), 刷卡日期时间, 23) as rq,
  CONVERT(varchar(100), 刷卡日期时间, 24) as sj
   from 你的表名
  )t group by 人员姓名,rq

热心网友 时间:2023-10-19 19:12

;WITH a([name],rq,timeserial) AS (
    SELECT N'name1','2016-09-01','8:20 11:20 18:54' union all
    SELECT N'name2','2016-09-01','8:10 11:40 19:20' union all
    SELECT N'name3','2016-09-01','8:20 12:10 18:34' union all
    SELECT N'name4','2016-09-01','8:29 12:20 18:34 22:02'
)
SELECT * FROM (
    SELECT a.name,a.rq
    , CASE WHEN d.id=1 AND d.checkin>'7:30' AND d.checkin<='8:30' THEN d.checkin  
           WHEN d.id=2 AND d.checkin>'11:30' AND d.checkin<='12:30' THEN d.checkin 
           WHEN d.id IN(3,4) THEN d.checkin 
    ELSE '' END AS checkin
    ,CASE d.ID WHEN 1 THEN N'上班一' WHEN 2 THEN N'下班一' WHEN 3 THEN N'上班二' WHEN 4 THEN N'下班二' else N'其他' end as ty
    FROM a 
    CROSS APPLY(SELECT a1.*,CONVERT(XML,'<n>'+REPLACE(a1.timeserial,' ','</n><n>')+'</n>') xtime FROM a AS a1 WHERE a1.name=a.name AND a1.rq=a.rq  ) b
    CROSS APPLY(SELECT ROW_NUMBER()OVER(PARTITION BY a.name,a.rq ORDER BY convert(int,replace(s.c.value('.','varchar(100)'),':',''))) AS ID
    , s.c.value('.','varchar(100)') AS checkin FROM b.xtime.nodes('n')s(c)) d
) AS t
PIVOT(MAX(checkin) for ty IN (上班一,下班一,上班二,下班二,其他)) m



namerq上班一下班一上班二下班二其他

name12016-09-018:2018:54NULLNULL

name22016-09-018:1011:4019:20NULLNULL

name32016-09-018:2012:1018:34NULLNULL

name42016-09-018:2912:2018:3422:02NULL

热心网友 时间:2023-10-19 19:13

set @tmp=right(@tmp,len(@tmp)-1)
把第一个逗号去掉

热心网友 时间:2023-10-19 19:13

说下,我的想法吧, 首先 就是 根据 姓名和日期,来 group by, 日期要用一个函数,保证只有日期,不会加上具体的时间,而且,在group by 后面能不能使用函数,这点,我不确定。 然后用
GROUP_CONCAT 这个函数就行了。mysql是这样,别的我就不知道了。
不过,group_concat 只能生成一个字段。不知道符不符合你的要求。思路大概是这样,写不写的出来,我就不知道了。
GROUP_CONCAT 怎么用,自己去百度搜索。
我要贴地址,估计还得被你骂。顺便说下,百度知道上,大家帮助本就无可厚非,提个问,要求就别那么多了。追问sqlserver 中是没有这个函数的

追答http://blog.itnmg.net/sqlserver-group_concat/ 原谅我,我又要贴链接了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 企业培训学到了什么 培训感悟简短 有关培训的感悟 通过培训学到什么 培训你学到了什么 领导问培训学到什么怎么回复 有没有追求柏拉图式爱情的女生 现在追求柏拉图式爱情的女生多吗? 柏拉图式爱情的女人需要的是什么 被脱毛膏烧伤现在脱去一层表皮了可还是很红怎么才能恢复正常皮肤颜色 用脱毛膏脱腋下的毛时不小心弄伤了皮肤 手臂麻痹 用脱毛膏的时候,不小心伤到皮肤了~~~ 脱毛膏在脸上使用时间太长,脸上皮肤好像被烧了,脸又疼又红,该怎么办啊? 用脱毛膏灼伤了脸部红肿脱皮会留下疤痕吗 用脱毛膏后皮肤损坏了,又变黑,怎样快速 昨晚用 脱毛膏脱唇毛,不到两分钟就开始刺痛,今早起来后发现皮肤灼伤烂了,怎么办,用什么药 用了脱毛膏,腋下周边皮肤被灼伤,还有渗水症状,好痛好痛 脱毛膏把皮肤烧了 为什么一更新就出现(ipad mini)“ios9验证失败,因为您不再连接到互联网”? 苹果手机系统更新,itunes报错4000,怎么解决? 打架对方多人被打人现在在医院警察没抓人,合理吗? 打架算不上轻微伤对方人多还有取保候审的怎么处理 关于生活心得的句子(三行) 说一说有哪些感悟生活的精辟句子语录? 微信群能给别人管理员吗 预防压疮发生的护理措施有哪些 求 mysql数据库里将一行数据的某些列更新到另外一行的对应某些列的sql语句 女生是不是一般都向往柏拉图式爱情啊 女生会不会都向往柏拉图式爱情啊 还有多少女孩倾慕柏拉图式爱情? 女生是不是一般都向往柏拉图式爱情 大家怎么看柏拉图式的爱情吖```? 柏拉图式的爱情——我跟我的女孩 我怎么才能得到一个渴望柏拉图式的爱情的女孩的心 唐嫣饰演的紫萱气质冷艳,宁珂霸气凌厉,她最被低估的角色是什么? 唐嫣说紫萱也是她的初心,你觉得她演紫萱这个角色演得怎么样? 唐嫣作为一名实力演员,不仅长得好看演技也好,那你都看过她的什么作品呢? 唐嫣说紫萱也是她的初心,紫萱这一角色对她来说有着怎样特殊的意义? 大家都说《仙剑3》里紫萱才是唐嫣的颜值演技巅峰,是这样的吗? 唐嫣说紫萱也是她的初心,唐嫣最好的角色是什么? 不愧是我的知音用文言文怎么说 男生对追自己的女生说不愧是我扣姐什么意思? 上联:升官发财死老板 下联:反水跑路当红娘 横批:不愧是我 打一角色? 【车主点评:不愧是我精挑细选出来的】 不愧是我学生近义词 一个男生对你说“不愧是我喜欢的人”我看上你了。算不算表白?