从 table 中提取具有多个要求的对
pull pairs from table with multiple requirements
我有一个包含多个员工以及他们工作了多少小时的数据库。请看下面。
因此,每个表示 Wellsite 的 Time.Type 都需要两行。一个用于属性:注册工作日,下一行显示属性:工作 ID。我的代码显示了所有具有 Job ID 的行,这是我需要删除的,除非它们上面有满足我条件的 Reg Work Day(见下文)。另外,我有一排上班时间类型很好,我没有遇到任何问题。
有人协助我完成这项工作,但只针对一名员工。现在我需要我的数据为多个员工完成这个过程。
我需要满足的条件是,当一行的 Time.Type 为 "Wellsite/Job/Vessel" 且属性为 "Regular Work Day" 时,"Hourly Value" 需要大于 15 .另外,我需要它正下方的行,该行的属性为 "Job ID",并且在 "value" 选项卡下也有工作编号。据我了解,日期列可用于将行保持在一起,但我只需要它为某些 employees/days 而不是所有内容工作。
下面的 table 显示了我所拥有的以及我想要它做的是在这个 table..
下面
CREATE TABLE mytable(
Complete_Name VARCHAR(9) NOT NULL PRIMARY KEY
,Day_of_Week VARCHAR(7) NOT NULL
,Date VARCHAR(11) NOT NULL
,Time_Type VARCHAR(19) NOT NULL
,Attribute VARCHAR(16) NOT NULL
,Value VARCHAR(28) NOT NULL
,Hourly_value_in_decimals NUMERIC(5,2)
);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',16.75);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Job ID','2213840',NULL);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeB','Tuesday','20-Oct-15','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',2.25);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeB','Tuesday','20-Oct-15','Wellsite/Job/Vessel','Job ID','2213840',NULL);
Table:
Complete_Name Day_of_Week Date Time_Type Attribute Value Hourly_value_in_decimals
------------- ----------- ----------- ------------------- ---------------- ---------------------------- ---------------------------------------
EmployeeA Tuesday 20-Oct-2015 Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 16.75
EmployeeA Tuesday 20-Oct-2015 Wellsite/Job/Vessel Job ID 2213840 NULL
EmployeeB Tuesday 20-Oct-15 Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 2.25
EmployeeB Tuesday 20-Oct-15 Wellsite/Job/Vessel Job ID 2213840 NULL
我想看到的是...
CREATE TABLE mytable(
Complete_Name VARCHAR(9) NOT NULL PRIMARY KEY
,Day_of_Week VARCHAR(7) NOT NULL
,Date VARCHAR(11) NOT NULL
,Time_Type VARCHAR(19) NOT NULL
,Attribute VARCHAR(16) NOT NULL
,Value VARCHAR(28) NOT NULL
,Hourly_value_in_decimals NUMERIC(5,2)
);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',16.75);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Job ID','2213840',NULL);
Table:
Complete_Name Day_of_Week Date Time_Type Attribute Value Hourly_value_in_decimals
------------- ----------- ----------- ------------------- ---------------- ---------------------------- ---------------------------------------
EmployeeA Tuesday 20-Oct-2015 Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 16.75
EmployeeA Tuesday 20-Oct-2015 Wellsite/Job/Vessel Job ID 2213840 NULL
因此,在我之前的回答的基础上,您需要根据不同的标准为不同的员工拉人。
例如,名为 Hogan 的员工可能需要天数 > 15,而名为 NotHogan 的员工可能需要天数 > 24。
为此,您将条件放入 table(在下面的示例中,我动态构建了 table),然后加入 table 以获取日期和名称必填。
然后我加入这个结果得到最终的数据。
SELECT *
FROM ROSTER
JOIN (
-- A list of dates and users we want to select
SELECT `Date`, Name
FROM ROSTER
JOIN (
-- Innermost table, our criteria, this can be an actual table in your db
SELECT 'Hogan' as N, 15 as C
UNION ALL
SELECT 'NotHogan' as N, 24 as C
) Criteria ON
Criteria.N = ROSTER.Name AND
ROSTER.`Hourly Value` > Criteria.C AND
Attribute = 'Reg Work Day'
) sub ON ROSTER.`Date` = sub.`Date` and ROSTER.Name = Sub.Name
我有一个包含多个员工以及他们工作了多少小时的数据库。请看下面。
因此,每个表示 Wellsite 的 Time.Type 都需要两行。一个用于属性:注册工作日,下一行显示属性:工作 ID。我的代码显示了所有具有 Job ID 的行,这是我需要删除的,除非它们上面有满足我条件的 Reg Work Day(见下文)。另外,我有一排上班时间类型很好,我没有遇到任何问题。
有人协助我完成这项工作,但只针对一名员工。现在我需要我的数据为多个员工完成这个过程。
我需要满足的条件是,当一行的 Time.Type 为 "Wellsite/Job/Vessel" 且属性为 "Regular Work Day" 时,"Hourly Value" 需要大于 15 .另外,我需要它正下方的行,该行的属性为 "Job ID",并且在 "value" 选项卡下也有工作编号。据我了解,日期列可用于将行保持在一起,但我只需要它为某些 employees/days 而不是所有内容工作。
下面的 table 显示了我所拥有的以及我想要它做的是在这个 table..
下面CREATE TABLE mytable(
Complete_Name VARCHAR(9) NOT NULL PRIMARY KEY
,Day_of_Week VARCHAR(7) NOT NULL
,Date VARCHAR(11) NOT NULL
,Time_Type VARCHAR(19) NOT NULL
,Attribute VARCHAR(16) NOT NULL
,Value VARCHAR(28) NOT NULL
,Hourly_value_in_decimals NUMERIC(5,2)
);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',16.75);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Job ID','2213840',NULL);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeB','Tuesday','20-Oct-15','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',2.25);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeB','Tuesday','20-Oct-15','Wellsite/Job/Vessel','Job ID','2213840',NULL);
Table:
Complete_Name Day_of_Week Date Time_Type Attribute Value Hourly_value_in_decimals
------------- ----------- ----------- ------------------- ---------------- ---------------------------- ---------------------------------------
EmployeeA Tuesday 20-Oct-2015 Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 16.75
EmployeeA Tuesday 20-Oct-2015 Wellsite/Job/Vessel Job ID 2213840 NULL
EmployeeB Tuesday 20-Oct-15 Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 2.25
EmployeeB Tuesday 20-Oct-15 Wellsite/Job/Vessel Job ID 2213840 NULL
我想看到的是...
CREATE TABLE mytable(
Complete_Name VARCHAR(9) NOT NULL PRIMARY KEY
,Day_of_Week VARCHAR(7) NOT NULL
,Date VARCHAR(11) NOT NULL
,Time_Type VARCHAR(19) NOT NULL
,Attribute VARCHAR(16) NOT NULL
,Value VARCHAR(28) NOT NULL
,Hourly_value_in_decimals NUMERIC(5,2)
);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',16.75);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Job ID','2213840',NULL);
Table:
Complete_Name Day_of_Week Date Time_Type Attribute Value Hourly_value_in_decimals
------------- ----------- ----------- ------------------- ---------------- ---------------------------- ---------------------------------------
EmployeeA Tuesday 20-Oct-2015 Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 16.75
EmployeeA Tuesday 20-Oct-2015 Wellsite/Job/Vessel Job ID 2213840 NULL
因此,在我之前的回答的基础上,您需要根据不同的标准为不同的员工拉人。
例如,名为 Hogan 的员工可能需要天数 > 15,而名为 NotHogan 的员工可能需要天数 > 24。
为此,您将条件放入 table(在下面的示例中,我动态构建了 table),然后加入 table 以获取日期和名称必填。
然后我加入这个结果得到最终的数据。
SELECT *
FROM ROSTER
JOIN (
-- A list of dates and users we want to select
SELECT `Date`, Name
FROM ROSTER
JOIN (
-- Innermost table, our criteria, this can be an actual table in your db
SELECT 'Hogan' as N, 15 as C
UNION ALL
SELECT 'NotHogan' as N, 24 as C
) Criteria ON
Criteria.N = ROSTER.Name AND
ROSTER.`Hourly Value` > Criteria.C AND
Attribute = 'Reg Work Day'
) sub ON ROSTER.`Date` = sub.`Date` and ROSTER.Name = Sub.Name