【发布时间】:2017-06-01 15:08:48
【问题描述】:
以下是我的 SQL 表:
CREATE TABLE [dbo].[My_Employee_Schedule] (
[Emp_Sch_Id] INT IDENTITY (1, 1) NOT NULL,
[Schedule_Date] DATETIME NULL,
[Start_Time] DATETIME NULL,
[End_Time] DATETIME NULL,
[Emp_ID] INT NULL,
[Job_ID] INT NULL,
PRIMARY KEY CLUSTERED ([Emp_Sch_Id] ASC),
FOREIGN KEY ([Emp_ID]) REFERENCES [dbo].[My_Employee] ([Employee_Id]) ON DELETE CASCADE,
FOREIGN KEY ([Job_ID]) REFERENCES [dbo].[My_Job_Type] ([Job_Type_Id]) ON DELETE CASCADE
);
CREATE TABLE [dbo].[My_Job_Type] (
[Job_Type_Id] INT IDENTITY (1, 1) NOT NULL,
[Job_Title] NVARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([Job_Type_Id] ASC)
);
我正在创建一个 ASP.NET C# Web 应用程序,并尝试对这些数据执行以下操作:
- 在外部 ASP 中继器中显示 Schedule_Date
- 然后使用 Employee_Schedule 表中的 FK 显示 Job_Title(来自 My_Job_Type 表)。
不显示与以下日期相关的作业,而是显示所有作业。
这是我当前的 SQL(显示“Waiter”、“Driver”和“Busser”):
SELECT Job_Title
FROM My_Job_Type
WHERE Job_Type_Id IN (
SELECT Job_Id
FROM My_Employee_Schedule
WHERE Schedule_Date IN (
SELECT DISTINCT CAST(Schedule_Date AS DATE) As Schedule_Date
FROM My_Employee_Schedule
WHERE Start_Time BETWEEN @startReportDate AND @endReportDate))
这是当前数据:
Emp_Sch_Id Schedule_Date Start_Time End_Time Emp_ID Job_ID
1 03/06/2017 00:00:00 03/06/2017 09:00:00 03/06/2017 10:00:00 5 2
2 03/06/2017 00:00:00 03/06/2017 11:30:00 03/06/2017 12:30:00 6 1
3 03/06/2017 00:00:00 03/06/2017 14:00:00 03/06/2017 15:00:00 5 3
4 03/06/2017 00:00:00 03/06/2017 12:00:00 03/06/2017 13:00:00 4 2
5 03/06/2017 00:00:00 03/06/2017 12:15:00 03/06/2017 15:15:00 4 2
Job_Type_Id Job_Title
1 位服务员
2 驱动程序
3 巴塞尔
【问题讨论】:
-
在 My_Job_Type 表中,“Waiter”、“Driver”和“Busser”是唯一的行。我认为这个当前的 SQL 语句正在显示每个 div 中的所有行。但是,Job_Id [外键] 在 Employee_Schedule 表中的每一行中附加了一个特定的 Job。我不想在每个 div 中显示,我只想显示 FK 与 Employee_Schedule 行相关联的作业。
-
例如,只有 Waiter 应该出现在星期六下,因为 Schedule_Date 为 3/6/2017 的 Employee_Schedule 行有一个 Job_ID 等于 1
-
你能把这些表中的数据贴出来吗?没有它,我们很难知道结果是否正确。
-
@scsimon 嗨,我已经发布了上面的表格数据。
-
根据您的变量设置,我发布的查询应该返回正确的结果,但您在此数据集中只有 3/6,并且显示的日期超出了此范围。
标签: c# asp.net sql-server