2017-07-02 28 views
2

我正在參加考勤報告,我需要從一個表中創建一個SQL查詢以返回該月的員工淨工作小時出勤率。 每月的某天應該作爲一個列,在行中應該是員工的總小時數。SQL查詢以列和總小時數作爲行返回月份

是有6列(僱員姓名,部門,職位,時間,超時和總學時

Picture for Selecting * From the Attendance Table

我想爲下面的返回值表:

EmployeeName | 1st | 2nd | 3rd | 4th | ...... | 6月30日


的Emp 1 | 10:30 | | 10:40 | | 10:10 | | 10:21 |

天列應該返回一個參數,所以我可以將它添加到水晶報告。

表結構 如果您可以告知請。

在此先感謝

回答

0

您可以使用CASE statment這樣的:

 SELECT EmployeeName, 
       (CASE WHEN EXTRACT(YEAR FROM DATE) = 2017 AND EXTRACT(MONTH FROM DATE) = 6 AND EXTRACT(DAY FROM DATE) = 1 then totalHours ELSE NULL END) AS "01/06", 
       (CASE WHEN EXTRACT(YEAR FROM DATE) = 2017 AND EXTRACT(MONTH FROM DATE) = 6 AND EXTRACT(DAY FROM DATE) = 2 then totalHours ELSE NULL END) AS "02/06", 
       . 
       . 
       . 
       (CASE WHEN EXTRACT(YEAR FROM DATE) = 2017 AND EXTRACT(MONTH FROM DATE) = 6 AND EXTRACT(DAY FROM DATE) = 30 then totalHours ELSE NULL END) AS "30/06" 

FROM Attendance 

所以,每一天的新列將被創建。

+0

我已經獲得在TimeIn和超時的區別,因爲這表是給所有的值。請檢查圖片/ –

+0

與我發佈的請求,它會返回所需的結果。像這樣: EmployeeName | 01/06 | 02/06 | 03/06 | 。 ..。 。 。 。 .. | 30/06 vivek ... | 05:07:| 。 。 。 。 。 ..。 。 。 。 –

+0

每個'案例'將爲想要的日創建一個列 –

0

我用這樣的

 CREATE TABLE `AxsLog` (
`id` integer NOT NULL UNIQUE, 
`Logon` text NOT NULL DEFAULT current_timestamp, 
`Logoff` text NOT NULL DEFAULT current_timestamp, 
`Duration` text NOT NULL DEFAULT 0, 
`SysDat` text NOT NULL DEFAULT current_timestamp, 
PRIMARY KEY(`id`)); 

您可以輕鬆地爲您的用戶表的每一行添加一個FK列。

請登錄ID爲每個條目,然後更新註銷

UPDATE AxsLog 
Set Duration= (SELECT sum(strftime('%s', logoff) - strftime('%s', logon)) 
/60 FROM AxsLog WHERE id= 1) 
WHERE id= 1 ; 

該行要建立一個報告,可以使用這樣的事情。這個查詢只給出了每個月的總和。

select total(Duration) 
FROM AxsLog where substr(sysdat,6,2) = 'month' 
0

您的要求,可以通過使用交叉表報表來滿足或者如果u要在SQL中實現然後用旋轉