gpt4 book ai didi

sql - 我如何在这里使用 SQL If 语句?

转载 作者:搜寻专家 更新时间:2023-10-30 23:32:02 25 4
gpt4 key购买 nike

如何在这里使用 IF THEN ELSE 语句?因为不是每个人都请假或加类。我在这里的人的帮助下进行了查询,我设法制作了 IdeaTable 并对其进行了编辑以使其更适合我的查询。但目前我面临一个新问题。

场景:员工 ID 123 在 2018-05-06 申请休假 4 小时,但花名册尚未出来。

下面是表格和数据

员工:

EmplyeeeID | Username | Password | GivenName | FamilyName | TeamID | ContactNo | StaffType
------------------------------------------------------------------------------------------
123 123 abc John Snow 1 999 1
1234 1234 abcd Jack Waller 2 223 1
12345 12345 abcde Ali Saw 1 123 1
123456 123456 abcdef Peter Peter 2 223 1
1234567 1234567 abcdeg Bryan Peter 1 333 1

花名册:

Duty_ID | EmployeeID |      Date        | ShiftType | ShiftDuration
--------------------------------------------------------------------
2 123 2018-05-05 1 8.25
4 1234 2018-05-04 1 8.25
5 12345 2018-05-05 1 8.25
7 123456 2018-05-04 1 8.25
8 1234567 2018-05-05 1 8.25

加类:

OTID | EmployeeID |     Date     | OT_Duration | OT_Reason
------------------------------------------------------------
2 1234 2018-05-04 2 Cover Duty

离开:

LeaveID | EmployeeID |   Date    | Duration_Off | Reason
----------------------------------------------------------
3 123 2018-05-05 2 NIL
4 123 2018-05-06 4 NIL

IdealTable(通过查询)

   Date    | EmployeeID | GivenName | FamilyName | TeamID | ShiftType | ShiftDuration | Duration_Off | OT_Duration | Total_Hours
---------------------------------------------------------------------------------------------------------------------------------
2018-05-05 123 John Snow 1 1 8.25 2 0 6.25
2018-05-04 1234 Jack Waller 1 1 8.25 0 2 10.25
2018-05-05 12345 Ali Saw 1 1 8.25 0 0 8.25
2018-05-04 123456 Peter Peter 1 1 8.25 0 0 8.25
2018-05-05 1234567 Bryan Peter 1 1 8.25 2 0 8.25

Problem

从图中可以看出第2行没有意义,因为员工123是在2018-05-06才请假的,怎么让它不显示呢?

我的查询

SELECT 
r.Date,
e.EmployeeID,
e.GivenName,
e.FamilyName,
e.TeamID,
r.ShiftType,
COALESCE(s.Shift_Duration, 0) AS Shift_Duration,
s.Shift_Description,
COALESCE(l.Duration_Off, 0) AS Duration_Off,
COALESCE(o.OT_Duration, 0) AS OT_Duration,
(COALESCE(s.Shift_Duration, 0) + COALESCE(o.OT_Duration, 0) - COALESCE(l.Duration_Off, 0)) AS Total_Hours
FROM
Employee e
INNER JOIN
Roster r ON e.EmployeeID = r.EmployeeID
LEFT JOIN
Leave l ON e.EmployeeID = l.EmployeeID
LEFT JOIN
Overtime o ON e.EmployeeID = o.EmployeeID
INNER JOIN
ShiftID s ON r.ShiftType = s.ShiftID

最佳答案

您的查询内部加入了 Employee 和 Roster,到目前为止一切正常。但是,对于这些行中的每一行,它都链接到该员工的所有休假请求。因此,您会收到每个花名册日的所有员工请假请求,而不仅仅是适当的请假请求。如果员工 123 像其他员工一样在 2018-05-04 有一个花名册日,那么您将有四个结果,而不仅仅是两个。你需要改变

LEFT JOIN
Leave l ON e.EmployeeID = l.EmployeeID

LEFT JOIN
Leave l ON e.EmployeeID = l.EmployeeID AND r.Date = l.Date

您还需要以相同的方式更改加类加入,否则一旦员工获得多个加类行或多个花名册行,您就会遇到同样的问题。

关于sql - 我如何在这里使用 SQL If 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48144096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com