簡體   English   中英

根據 2 列值將 mysql 行拆分為 2 行

[英]Split mysql row into 2 rows based on 2 column values

我正在嘗試創建考勤卡數據的 output 視圖,以便可以將其導出到工資單系統。 目前,數據結構是這樣的。

|Emp_ID|Date|Job|CostCode|Reg_Hrs|OT_Hrs|
Data
|BR0000|date|012|01234567|0000008|000002|

導入過程需要常規時間和加班時間在不同的行上所以我的 output 需要如下所示:

|Emp_ID|T_Date|Job_Code|Cost_Code|Reg_Hrs|OT_Hrs|
Data
|BR0000|..date|00000012|001234567|0000008|000000|
|BR0000|..date|00000012|001234567|0000000|000002|

我已經嘗試了 UNION ALL 語句的一些變體並且得到了接近但不是我需要的,因為第二個 select 沒有創建正確的值或列布局。

SELECT `Emp_ID` AS `Emp_ID`,
    `T_Date` AS `T_Date`,
    SUBSTRING(CONCAT(`Job_Num`,`Job_let`),1,7) AS `Job_Code`,
    CONCAT(`Job_Code`, IFNULL(`Equip_Code`,'0000')) AS `Cost_Code,
    `Reg_Hrs` as `Reg_Hrs`,
    `OT_Hrs` as `OT_Hrs`
     FROM `timecard_payroll`
     WHERE `Reg_Hrs` <> 0
UNION ALL
SELECT `Emp_ID` AS `Emp_ID`,
       `T_Date` AS `T_Date`,
        SUBSTRING(CONCAT(`Job_Num`,`Job_let`),1,7) AS `Job_Code`,
        CONCAT(`Job_Code`, IFNULL(`Equip_Code`,'0000')) AS `Cost_Code,
        `Reg_Hrs` as `none`,  -- have tried different variations of these last 3 lines
        `OT_Hrs` as `OT_Hrs` FROM `timecard_payroll`
        WHERE `OT_Hrs` <> 0
ORDER BY `Emp_ID`, `T_Date`

我可能必須編寫一個 PHP 腳本來寫入臨時表以進行導出。

任何幫助表示贊賞。

正式地:

SELECT {other columns}, Reg_Hrs * x.x Reg_Hrs, OT_Hrs * (1 - x.x) OT_Hrs
FROM source table
CROSS JOIN ( SELECT 0 x 
             UNION ALL
             SELECT 1 ) x

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM