我怎样才能证明某人是他们监督的转变的一部分?

时间:2016-08-01 20:05:37

标签: mysql

我正在使用数据库处理我正在查看员工活动的项目。我有主表员工,其中包含员工信息,包括每位员工的主管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是一名主管,因此他的主管领域指向他的主管。我想做的就是让它表明他正处于他监管的转变之中。

2 个答案:

答案 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