我正在尝试从两个表之间的一组时间和天数中获取特定格式。
数据库: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 周四
最后,这个数据集的所有时间都不同:
将显示为 5 行:
13:48-14:48 米
15:48-16:48 时间
05:49-23:53 西
14:49-16:49
13:49-16:49 楼
我在分组时间方面没有取得多大成功。我确实想出了如何使用“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, 1)
ELSE NULL
END)
FROM MeetingTime m
Inner Join [DayOfWeek] d on d.Id = m.DayOfWeekId
Where m.ClassId = class.Id
FOR XML PATH('')), 1, 1, '') [ClassSchedule]
我也不反对只返回行并在 C# 代码中处理数据操作,而是想看看 SQL 是否可以处理它。