ross_liu 2020-09-19 19:37 采纳率: 20%
浏览 57
已采纳

如何通过SQLSERVER语句得到如下结果。

图片说明

  • 写回答

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函数来消除末尾多余的逗号,这里就不继续下去了。如果需要代码我可以继续贴上去。
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?