如何解决SQL 查询按时间分组并汇总和连接字符串值
数据库: MeetingTime 表具有从 MeetingTime.DayOfWeekId(外键)到表 DayOfWeek.Id(主键)的关系。示例查询:
select t.ClassId,d.Name,t.StartTime,t.EndTime
From MeetingTime t
Inner Join DaysOfWeek d on d.Id = t.DayOfWeekId
Where t.classId = 8
结果:
我希望这组数据的结果是一行,因为开始和结束时间相同。
09:00-15:35 M/T/W/Th/F
注意,上面的开始和结束时间可以在上面单独列,主要目标是显示每个分组时间的星期几。
我希望显示在 2 行中:
07:35-14:15 M/T/W
08:00-14:15 Th/F
最后,这个所有时间都不同的数据集:
将显示在 5 行中:
13:48-14:48 M
15:48-16:48 T
05:49-23:53 W
14:49-16:49 日
13:49-16:49 F
我在分组时间方面没有取得太大的成功。我确实想出了如何使用“Stuff”运算符将一周中的几天连接到一列中,但还没有结合开始和结束时间的分组。
连接和汇总天数:
STUFF((SELECT '/ ' +
(CASE
WHEN d.[Name] = 'Thursday' THEN SUBSTRING(d.[Name],1,2)
WHEN d.[Name] = 'Sunday' THEN 'U'
WHEN d.[Name] != '' THEN SUBSTRING(d.[Name],1)
ELSE NULL
END)
FROM MeetingTime m
Inner Join [DayOfWeek] d on d.Id = m.DayOfWeekId
Where m.ClassId = class.Id
FOR XML PATH('')),'') [ClassSchedule]
我也不反对在 C# 代码中只返回行并处理数据操作,而是想看看 sql 是否可以处理它。
解决方法
我能够完成这项工作。这是查询:
select
t.ClassId,t.StartTime,t.EndTime,STUFF((SELECT '/' + (CASE
WHEN w.[Name] = 'Thursday' THEN SUBSTRING(w.[Name],1,2)
WHEN w.[Name] = 'Sunday' THEN 'U'
WHEN w.[Name] != '' THEN SUBSTRING(w.[Name],1)
ELSE NULL
END)
From MeetingTime s
Inner Join DayOfWeek w on w.Id = s.DayOfWeekId
Where s.classId = 7 and s.DayOfWeekId > 0
and s.StartTime = t.StartTime
and s.EndTime = t.EndTime
FOR XML PATH('')),'') [ClassSchedule]
From MeetingTime t
Inner Join DayOfWeek d on d.Id = t.DayOfWeekId
Where t.classId = 7 and t.DayOfWeekId > 0
Group by t.StartTime,t.ClassId
显然是硬编码的 ID,您想创建一个变量。
时代不同了:
只有周一/周三/周五的时间。
我对此感觉很好,但我想修复上面结果图像的顺序,其中所有时间都不同且日期不按时间顺序排列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。