0

我正在尝试从两个表之间的一组时间和天数中获取特定格式。

数据库: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 是否可以处理它。

4

1 回答 1

0

我能够得到这个工作。这是查询:

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, 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('')), 1, 1, '') [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.EndTime, t.ClassId

显然,您想要创建一个变量的硬编码 Id。

开始时间和结束时间都相同的结果: 在此处输入图像描述

有时相同,有时不同: 在此处输入图像描述

有时相同,有时不同,日期不按顺序排列: 在此处输入图像描述

时代不同:

在此处输入图像描述

只有周一/周三/周五的时间。

在此处输入图像描述

我对此感觉很好,除了我想修复上述结果图像的顺序,其中所有时间都不同并且日子不是按时间顺序排列的。

于 2021-04-27T03:11:30.513 回答