簡體   English   中英

SQL查詢以月份為列返回月份,以小時為總小時返回

[英]SQL Query to return Month days as Columns and Total Hours as Row

我正在處理出勤報告,是否需要從一個表創建一個SQL查詢以返回員工當月的凈工作時間。 月份中的一天應該作為一列,而行中應該是員工的總小時數。

該表有6列(員工姓名,部門,職位,進場時間,超時時間和總工時

用於選擇的圖片*從出勤表中

我想返回以下值:

員工姓名 | 1st | 2號 | 第三名 4號 | ...... | 6月30日


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

應該在參數中返回“天數”列,以便我可以將其添加到Crystal報表中。

表結構,如果您可以建議的話。

提前致謝

您可以這樣使用CASE語句:

        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

因此,每天都會創建一個新列。

我用這樣的東西

        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' 

您的要求可以通過使用交叉表報表來滿足,或者如果您想在sql中實現,則可以使用數據透視表

暫無
暫無

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

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