• 全部
...

求时段分配的负责人

bright33234 2021-05-20 04:59:29
...全文
给本帖投票
21902 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2021-05-26
  • 打赏
  • 举报
回复
这么长时间都没说到点上,左边的时段表是个什么结构?主要是负责时段这个字段,是 beginTime,endTime两个字段,还是就是字符型,写上21:00-10:00
morliz子轩 2021-05-26
  • 打赏
  • 举报
回复
引用 12 楼 bright33234 的回复:
[quote=引用 10 楼 morliz子轩 的回复:]通过订单表的时间字段,去case when 来判断具体的时段,再分配符合条件的负责人。 就是你要的结果。
时间怎么判断大小的,我不太会这方面[/quote] 如果你提供的Excel上【负责时段】是DateTime类型。 那就可以这样获取到日期和时间部分: 日期:convert(varchar(10),【负责时段】,120) as CurDate 分钟:datepart(minute,【负责时段】,varchar(2)) as CurMinute 获取到之后,再用case when 来进行条件判断处。 判断你要搞清楚,有哪几个部分的比较,比如日期区间,小时区间,最后才是将获取的分钟去判断是符合哪个区间。 你给的基础数据表,只是一个原型,具体发生记录数据,是怎样的,没有提供。别人没法给你写。
bright33234 2021-05-25
  • 打赏
  • 举报
回复
引用 10 楼 morliz子轩 的回复:
通过订单表的时间字段,去case when 来判断具体的时段,再分配符合条件的负责人。
就是你要的结果。
时间怎么判断大小的,我不太会这方面
锟斤拷锟斤拷 2021-05-25
  • 打赏
  • 举报
回复

CREATE TABLE #A (
NAME VARCHAR(5),
BEGINHH INT,
ENDHH INT,
BEGINMM INT,
ENDMM INT
)
CREATE TABLE #B (
ORDERID VARCHAR(30)
)
INSERT INTO #A VALUES ('A',21,10,0,20)
INSERT INTO #A VALUES ('B',21,10,20,40)
INSERT INTO #B VALUES ('TS202105192331201111')

SELECT * FROM #B B LEFT JOIN #A A ON 
(
--跨天,HH>开始HH OR HH<结束HH
(A.BEGINHH>A.ENDHH AND 
A.BEGINHH<CAST(SUBSTRING(B.ORDERID,11,2) AS INT) OR (A.ENDHH>CAST(SUBSTRING(B.ORDERID,11,2) AS INT)))
OR
--不跨天,HH>开始HH AND HH<结束HH
(A.BEGINHH<A.ENDHH AND
A.BEGINHH<CAST(SUBSTRING(B.ORDERID,11,2) AS INT) AND (A.ENDHH>CAST(SUBSTRING(B.ORDERID,11,2) AS INT)))
)
--跨不跨天都要 MM>开始MM AND MM<结束MM
AND A.BEGINMM<CAST(SUBSTRING(B.ORDERID,13,2) AS INT) AND A.ENDMM>CAST(SUBSTRING(B.ORDERID,13,2) AS INT)


DROP TABLE #A,#B
≥和≤
bright33234 2021-05-24
  • 打赏
  • 举报
回复
订单那里就是例子
morliz子轩 2021-05-24
  • 打赏
  • 举报
回复
通过订单表的时间字段,去case when 来判断具体的时段,再分配符合条件的负责人。 就是你要的结果。
bright33234 2021-05-24
  • 打赏
  • 举报
回复
引用 7 楼 锟斤拷锟斤拷 的回复:
那你就把左边的表弄一弄,开始时、结束时,开始分、结束分都拆成单独的字段,然后右边表left join左边表 on 十一位、十二位 between 开始时 and 结束时 and 十三十四位 between 开始分 and 结束分,差不多就行了吧
可以再帮我一把吗,你弄个模拟的我看看是怎样的
bright33234 2021-05-24
  • 打赏
  • 举报
回复
引用 7 楼 锟斤拷锟斤拷 的回复:
那你就把左边的表弄一弄,开始时、结束时,开始分、结束分都拆成单独的字段,然后右边表left join左边表 on 十一位、十二位 between 开始时 and 结束时 and 十三十四位 between 开始分 and 结束分,差不多就行了吧
不会~
锟斤拷锟斤拷 2021-05-24
  • 打赏
  • 举报
回复
那你就把左边的表弄一弄,开始时、结束时,开始分、结束分都拆成单独的字段,然后右边表left join左边表 on 十一位、十二位 between 开始时 and 结束时 and 十三十四位 between 开始分 and 结束分,差不多就行了吧
bright33234 2021-05-24
  • 打赏
  • 举报
回复
这样不行吧,改死人,每天可能都会变
锟斤拷锟斤拷 2021-05-24
  • 打赏
  • 举报
回复
可以写一个长长的case when case when 订单号的十一位、十二位(时) 在..区间 and 十三、十四位(分)在..区间 then 某某负责人 ...(有多少负责人就重复多少行) end 因为感觉左边这个表的数据处理完再join起来挺麻烦的,不如查右边表的时候直接case when算了
锟斤拷锟斤拷 2021-05-24
  • 打赏
  • 举报
回复
引用 2 楼 morliz子轩 的回复:
你是不是还差一张实际发生的数据表,没放出来? 咋写?
看出来了,订单号里有时间。
morliz子轩 2021-05-21
  • 打赏
  • 举报
回复
你是不是还差一张实际发生的数据表,没放出来? 咋写?
bright33234 2021-05-21
  • 打赏
  • 举报
回复
有老师帮帮忙吗~~~~~~~~~~~~~~

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部