我正在使用数据库处理我正在查看员工活动的项目。我有主表员工,其中包含员工信息,包括每位员工的主管ID。我有另一张表,其中包含班次和主管ID。当我尝试填充班次信息时,我的问题出现了。它为员工填充,但对于主管来说是空的,因为他们有自己的主管。我试图弄清楚如何对其进行编码,这样我就可以证明轮班的主管是这种转变的一部分。
填充班次信息的基本查询如下。
SELECT
nbr,
Event_Activity,
Minutes,
hours,
Call_for_Service,
incident,
LAST_NAME,
FIRST_NAME,
c.Employee_Nbr,
Supervisor,
sector_shift
FROM
cad c
JOIN
employees e ON e.en = c.employee_nbr
left JOIN
sector s ON s.supervisor_id = e.supervisor
order by sector_shift asc;
我对SQL很新,所以我感谢任何帮助。
Sector
Field, Type, Null, Key
sector_shift, varchar(12), NO, PRI
supervisor_id, varchar(12), YES, MUL
Employees
Field Type, Null, Key
Position, varchar(255), NO
Job_Code, varchar(5), YES
Last_Name, varchar(25), YES
First_Name, varchar(12), YES
Email_Address, varchar(45), NO, UNI
EN, varchar(12), NO, PRI
Hire_Date, varchar(12), YES
Status, varchar(45), YES
Classification, varchar(12), YES
Supervisor, varchar(12), YES, MUL
CAD
Field, Type, Null, Key
cad_id, int(11), NO, PRI
Nbr, int(11), NO
Event_Activity, varchar(45), YES
Minutes, int(11), NO, MUL
Hours, varchar(25), YES
Call_for_Service, int(11), NO, MUL
Incident, int(11), NO, MUL
Misd., int(11), NO, MUL
Felony, int(11), NO, MUL
Other, int(11), NO, MUL
Report_Issued, int(11), NO, MUL
Employee_Nbr, varchar(12), YES, MUL
以下是返回内容的示例。
Report_Nbr, crime, date, location, LAST_NAME, FIRST_NAME, Employee_Nbr, Supervisor, sector_shift
160002, PROPERTY, 01/01/16, 1516 N. MAIN ST., HOLLIS, NANCY, 80951, 48784, 2
160001, PROPERTY, 01/01/16, 6592 BELLCOURT PKY, WINCE, TIFFANY, 48714, 57080, 3
160003, DRUG - MARIJUANA, 01/01/16, 986 N. FRANKLIN ST., GARCIA, MARK, 72420, 12133, Delta
160005, ACCIDENT, 01/03/16, 3765 CHARLES DR., ALLEN, MICHAEL, 83701, 41647, Alpha
160013, DISPATCH, 01/04/16, 567 COWART LN., TALOBORT, ROGER, 41647, 55054, NULL
160007, PROPERTY, 01/04/16, 6594 HENDERSON AVE., SMITH, FRANK, 62500, 41647, Alpha
null是一名主管,因此他的主管领域指向他的主管。我想做的就是让它表明他正处于他监管的转变之中。
答案 0 :(得分:0)
如果没有看到架构中的内容,很难说,但如果主管在Supervisor列的supervisor_id列中出现NULL,那么您需要进行此连接: / p>
left JOIN
sector s ON s.supervisor_id = e.supervisor
正确的加入。您可能希望使用LEFT,RIGHT和INNER连接进行一些练习。
也可能是你可以使用联合和超选择得到你想要的东西。想象一下,我有一个数据库(不明智地,我认为)将员工班次数据和管理员班次数据存储在单独的表中。他们的模式也有所不同:
表employee_shifts包含字段id,employee_id,full_name,shift_date,hours_worked和supervisor_id。 表supervisor_shifts具有字段id,supervisor_id,full_name,shift_date。
同样,这将是一个非常不明智的数据库模式设计,但它将有助于理解union和superselect的概念。这是一个查询,可以帮助我获得两个表的统一视图:
SELECT
*
FROM (
SELECT
employee_id,
full_name,
shift_date,
hours_worked,
supervisor_id
FROM employee_shifts
),
(
SELECT
supervisor_id AS employee_id,
full_name,
shift_date,
8 AS hours_worked,
supervisor_id
FROM supervisor_shifts
)
在上面的示例中,您使用两个不同的select语句(在括号中缩进)与逗号组合在一起。 SQL关键字AS将一个字段别名为另一个名称。在这种情况下,由于我们的模式不同,我们必须将supervisor_shifts表变得更像employee表。我们通过假设主管工作8小时(" 8 AS hours_worked")并使用他们自己的id作为employee_id来做到这一点。
这应该有助于让你盯着看。祝你好运。
答案 1 :(得分:0)
经过多次试验和错误,我最终发现使用CASE是最简单的选择。在查询中代替sector_shift,我放置了以下内容并填充了我的空值。如果有人知道我可以做到这一点的简单方法,请告诉我。
case
when Employee_Nbr = '38419' then '1'
when Employee_Nbr = '48784' then '2'
when Employee_Nbr = '57080' then '3'
when Employee_Nbr = '60055' then '4'
when Employee_Nbr = '55104' then '5'
when Employee_Nbr = '59743' then '6'
when Employee_Nbr = '41647' then 'Alpha'
when employee_nbr = '52790' then 'Bravo'
when Employee_Nbr = '61462' then 'Charlie'
when employee_nbr = '12133' then 'Delta'
when employee_nbr = '56965' then 'Admin'
when sector_shift is null then 'Training'
else sector_shift
end as Sector_shift