4条回答 默认 最新
- 猫狸嘎 2020-09-22 10:44关注
我的方法有点繁琐,每一步的操作都用临时表装起来了,你可以以此执行查看每一个临时表来看懂整个操作的逻辑。我能力有限,这不一定是tsql的最优解,可以参考下
IF OBJECT_ID('TEMPDB..#Tab1') IS NOT NULL DROP TABLE #Tab1 select * into #Tab1 from ( select sfcno = 10, time = '08:00' union all select sfcno = 10, time = '08:10' union all select sfcno = 11, time = '08:30' union all select sfcno = 22, time = '09:10' union all select sfcno = 33, time = '10:10' union all select sfcno = 44, time = '11:10' union all select sfcno = 555, time = '11:30' ) as Tab1 IF OBJECT_ID('TEMPDB..#Tab2') IS NOT NULL DROP TABLE #Tab2 select * into #Tab2 from ( select time = case when left(time,1)=0 then substring(time,2,1)+':00-'+cast(substring(time,2,1)+1 as nvarchar)+':00' else substring(time,1,2)+':00-'+cast(substring(time,1,2)+1 as nvarchar)+':00' end ,sfcno from #Tab1 group by case when left(time,1)=0 then substring(time,2,1)+':00-'+cast(substring(time,2,1)+1 as nvarchar)+':00' else substring(time,1,2)+':00-'+cast(substring(time,1,2)+1 as nvarchar)+':00' end ,sfcno ) as Tab2 IF OBJECT_ID('TEMPDB..#Tab3') IS NOT NULL DROP TABLE #Tab3 select * into #Tab3 from ( select time ,sfcno = (Select cast(a2.sfcno as varchar)+',' from #Tab2 as a2 where a2.time = a1.time for xml path('')) from #Tab2 as a1 group by time ) as Tab3 select * from #Tab3 pivot (max(sfcno) for time in ([8:00-9:00],[9:00-10:00],[10:00-11:00],[11:00-12:00])) b
最后执行结果比较贴近。可以利用substring与len函数来消除末尾多余的逗号,这里就不继续下去了。如果需要代码我可以继续贴上去。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 win11 23H2删除推荐的项目,支持注册表等
- ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
- ¥15 qt6.6.3 基于百度云的语音识别 不会改
- ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
- ¥15 神经网络怎么把隐含层变量融合到损失函数中?
- ¥15 lingo18勾选global solver求解使用的算法
- ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
- ¥20 测距传感器数据手册i2c
- ¥15 RPA正常跑,cmd输入cookies跑不出来
- ¥15 求帮我调试一下freefem代码