Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL Case语句双结果_Php_Mysql - Fatal编程技术网

Php MySQL Case语句双结果

Php MySQL Case语句双结果,php,mysql,Php,Mysql,你好! 我正在处理我的项目,需要指出时间是否存在、休假、假期。如果员工在场,我会计算从进到出的时间。如果请假和休假是应付的,那么应付的总时间就是他们的工作日程 Select `leave`.emp_id, leave_request.date, CASE WHEN leave.status_id = 4 AND leave_request.with_pay = 1 THEN

你好! 我正在处理我的项目,需要指出时间是否存在、休假、假期。如果员工在场,我会计算从进到出的时间。如果请假和休假是应付的,那么应付的总时间就是他们的工作日程

Select `leave`.emp_id,
                    leave_request.date,
                    CASE  WHEN  leave.status_id = 4 AND leave_request.with_pay = 1  THEN 
                    ( 
                      SELECT TIMESTAMPDIFF(HOUR, w_s.time_in, w_s.time_out) 
                      FROM working_schedule w_s
                      JOIN employee_working_schedule ews ON w_s.id = ews.working_schedule_id
                      WHERE ews.employee_id = '01-0001' 
                    ) 
                    WHEN leave.status_id = 4 AND leave_request.with_pay = 0  THEN '0'
                    END AS status               
                    FROM `leave`
                    JOIN leave_request On `leave`.id = leave_request.`leave_id`
                    JOIN employee_logs AS e_l ON leave.emp_id = e_l.employee_id
                    WHERE `leave`.emp_id = '01-0001'    
                    UNION
                    SELECT e.employee_code AS id, 
                    CAST(e_l.time_in As date) day,
                    CASE    WHEN e_l.time_in IS NOT NULL THEN TIMESTAMPDIFF(HOUR, e_l.time_in, e_l.time_out)

                    FROM employee e
                    LEFT JOIN employee_logs e_l ON e.employee_code = e_l.employee_id
                    LEFT JOIN employee_company e_c ON e.employee_code = e_c.employee_id
                    LEFT JOIN company c ON e_c.company_id = c.id
                    JOIN employee_working_schedule ews On e.employee_code = ews.employee_id
                    JOIN working_schedule w_s On ews.working_schedule_id = w_s.id
                    WHERE e.employee_code = '01-0001' 
                    AND e_l.time_in BETWEEN '2017-09-01' AND '2017-09-28'
                    UNION
                    SELECT '01-0001',
                    CASE WHEN holiday.date BETWEEN '2017-09-01' AND '2017-09-28' THEN
                    (SELECT holiday.date) END AS date,
                    CASE WHEN holiday.date BETWEEN '2017-09-01' AND '2017-09-28' THEN 
                    ( 
                      SELECT TIMESTAMPDIFF(HOUR, w_s.time_in, w_s.time_out) 
                      FROM working_schedule w_s
                      JOIN employee_working_schedule ews ON w_s.id = ews.working_schedule_id
                      WHERE ews.employee_id = '01-0001' 
                    ) 
                    END AS status
                    FROM holiday    

因此,这里是否可以添加另一个结果。例如(如果e_l.time_in不为空,则TimeStamp Diff(小时、e_l.time_in、e_l.time_out)以小时数结束),然后
显示
以状态结束


如果我理解正确,您希望为状态的select语句添加另一列。 也许你需要做的就是这样

SELECT `leave`.emp_id,
       leave_request.date,
       CASE 
            WHEN leave.status_id = 4 AND leave_request.with_pay = 1 THEN (
                     SELECT TIMESTAMPDIFF(HOUR, w_s.time_in, w_s.time_out)
                     FROM   working_schedule w_s
                            JOIN employee_working_schedule ews
                                 ON  w_s.id = ews.working_schedule_id
                     WHERE  ews.employee_id = '01-0001'
                 )
            WHEN leave.status_id = 4 AND leave_request.with_pay = 0 THEN '0'
       END AS hours_count,
       CASE 
            WHEN leave.status_id = 4 AND leave_request.with_pay = 1 THEN 'Paid'
            WHEN leave.status_id = 4 AND leave_request.with_pay = 0 THEN 'Unpaid'
       END + ' Leave' AS Status
FROM   `leave`
       JOIN leave_request
            ON  `leave`.id = leave_request.`leave_id`
       JOIN employee_logs  AS e_l
            ON  leave.emp_id = e_l.employee_id
WHERE  `leave`.emp_id = '01-0001'
UNION

SELECT e.employee_code            AS id,
       CAST(e_l.time_in AS DATE) AS Date,
       CASE 
            WHEN e_l.time_in IS NOT NULL THEN TIMESTAMPDIFF(HOUR, e_l.time_in, e_l.time_out)
       END AS hours_count,
       'Present' AS Status
FROM   employee e
       LEFT JOIN employee_logs e_l
            ON  e.employee_code = e_l.employee_id
       LEFT JOIN employee_company e_c
            ON  e.employee_code = e_c.employee_id
       LEFT JOIN company c
            ON  e_c.company_id = c.id
       JOIN employee_working_schedule ews
            ON  e.employee_code = ews.employee_id
       JOIN working_schedule w_s
            ON  ews.working_schedule_id = w_s.id
WHERE  e.employee_code = '01-0001'
       AND e_l.time_in BETWEEN       '2017-09-01' AND '2017-09-28'
UNION

SELECT '01-0001',
       CASE 
            WHEN holiday.date BETWEEN '2017-09-01' AND '2017-09-28' THEN (
                     SELECT holiday.date
                 )
       END  AS DATE,
       CASE 
            WHEN holiday.date BETWEEN '2017-09-01' AND '2017-09-28' THEN (
                     SELECT TIMESTAMPDIFF(HOUR, w_s.time_in, w_s.time_out)
                     FROM   working_schedule w_s
                            JOIN employee_working_schedule ews
                                 ON  w_s.id = ews.working_schedule_id
                     WHERE  ews.employee_id = '01-0001'
                 )
       END  AS hours_count,
       'Holiday' AS Status
FROM   holiday    
只需在小时数列旁边添加另一列即可。
希望有此帮助。

如果我理解正确,您希望为select状态语句添加另一列。 也许你需要做的就是这样

SELECT `leave`.emp_id,
       leave_request.date,
       CASE 
            WHEN leave.status_id = 4 AND leave_request.with_pay = 1 THEN (
                     SELECT TIMESTAMPDIFF(HOUR, w_s.time_in, w_s.time_out)
                     FROM   working_schedule w_s
                            JOIN employee_working_schedule ews
                                 ON  w_s.id = ews.working_schedule_id
                     WHERE  ews.employee_id = '01-0001'
                 )
            WHEN leave.status_id = 4 AND leave_request.with_pay = 0 THEN '0'
       END AS hours_count,
       CASE 
            WHEN leave.status_id = 4 AND leave_request.with_pay = 1 THEN 'Paid'
            WHEN leave.status_id = 4 AND leave_request.with_pay = 0 THEN 'Unpaid'
       END + ' Leave' AS Status
FROM   `leave`
       JOIN leave_request
            ON  `leave`.id = leave_request.`leave_id`
       JOIN employee_logs  AS e_l
            ON  leave.emp_id = e_l.employee_id
WHERE  `leave`.emp_id = '01-0001'
UNION

SELECT e.employee_code            AS id,
       CAST(e_l.time_in AS DATE) AS Date,
       CASE 
            WHEN e_l.time_in IS NOT NULL THEN TIMESTAMPDIFF(HOUR, e_l.time_in, e_l.time_out)
       END AS hours_count,
       'Present' AS Status
FROM   employee e
       LEFT JOIN employee_logs e_l
            ON  e.employee_code = e_l.employee_id
       LEFT JOIN employee_company e_c
            ON  e.employee_code = e_c.employee_id
       LEFT JOIN company c
            ON  e_c.company_id = c.id
       JOIN employee_working_schedule ews
            ON  e.employee_code = ews.employee_id
       JOIN working_schedule w_s
            ON  ews.working_schedule_id = w_s.id
WHERE  e.employee_code = '01-0001'
       AND e_l.time_in BETWEEN       '2017-09-01' AND '2017-09-28'
UNION

SELECT '01-0001',
       CASE 
            WHEN holiday.date BETWEEN '2017-09-01' AND '2017-09-28' THEN (
                     SELECT holiday.date
                 )
       END  AS DATE,
       CASE 
            WHEN holiday.date BETWEEN '2017-09-01' AND '2017-09-28' THEN (
                     SELECT TIMESTAMPDIFF(HOUR, w_s.time_in, w_s.time_out)
                     FROM   working_schedule w_s
                            JOIN employee_working_schedule ews
                                 ON  w_s.id = ews.working_schedule_id
                     WHERE  ews.employee_id = '01-0001'
                 )
       END  AS hours_count,
       'Holiday' AS Status
FROM   holiday    
只需在小时数列旁边添加另一列即可。
希望这有帮助。

为什么不为每个select语句添加另一列,例如,第二个select语句将
'Present'添加为Status
那么,如果statement@vikitheoororado不为每个select语句添加另一列,例如,第二个select语句将“当前”添加为状态,因此可以在case statement@VikiTheoloradoHi@viki中添加另一列,谢谢您的回复。对我这样的初学者来说,你的帮助很大。祝你一天愉快:)嗨@viki谢谢你的回复。对我这样的初学者来说,你的帮助很大。祝你愉快:))