2017-01-16 40 views
1

這是我的表格。在DataGridView的不同行中顯示datetime的值

attendance 
empID   int(11) 
time_stamp  datetime 
in_out   char(3)  *determines in/out of employee 
am_pm   char(2)  *determines if morning/afternoon shift 

下圖顯示了我想要的輸出結果。我需要將datetime數據類型的time_stamp的值顯示在vb.net的DataGrid中。

我知道如何使用date_format。我只是不知道如何選擇數據,讓它們以這種方式顯示。

數據庫輸入

empID | time_stamp   | in_out | am_pm 
    152 | 2016-01-01 12:00:00 | out  | am 
    152 | 2016-01-01 08:00:00 | in  | am 
    152 | 2016-01-02 12:00:00 | out  | am 
    152 | 2016-01-02 08:00:00 | in  | am 
    152 | 2016-01-03 12:00:00 | out  | am 
    152 | 2016-01-03 08:00:00 | in  | am 
    152 | 2016-01-01 05:00:00 | out  | pm 
    152 | 2016-01-01 01:00:00 | in  | pm 
    152 | 2016-01-02 05:00:00 | out  | pm 
    152 | 2016-01-02 01:00:00 | in  | pm 
    152 | 2016-01-03 05:00:00 | out  | pm 
    152 | 2016-01-03 01:00:00 | in  | pm 

員工所需輸出152

DAY |  AM   |  PM   | 
1 | 8:00:00 12:00:00 | 1:00:00 5:00:00 | 
2 | 8:00:00 12:00:00 | 1:00:00 5:00:00 | 
3 | 8:00:00 12:00:00 | 1:00:00 5:00:00 | 

hard copy of the daily time record

+0

我建議您在內存中的臨時DataTable,並使用循環來從你的SELECT查詢的結果來填充它。儘管可以在SQL中轉置數據等,但我懷疑你會發現在VB代碼中轉換數據要容易得多 – SSS

+0

此外,您可能要考慮將多個DataGridView用於UI顯示。 – InteXX

回答

1

您可以使用這樣的查詢:

SELECT empID, emp_day, MAX(am_in1) as am_in, MAX(am_out1) as am_out, MAX(pm_in1) as pm_in, MAX(pm_out1) as pm_out 
FROM (
SELECT empID, DATE_FORMAT(`time_stamp`,'%e') as emp_day, 
CASE WHEN am_pm='am' AND in_out='in' THEN DATE_FORMAT(`time_stamp`,'%T') ELSE '' END as am_in1, 
CASE WHEN am_pm='am' AND in_out='out' THEN DATE_FORMAT(`time_stamp`,'%T') ELSE '' END as am_out1, 
CASE WHEN am_pm='pm' AND in_out='in' THEN DATE_FORMAT(`time_stamp`,'%T') ELSE '' END as pm_in1, 
CASE WHEN am_pm='pm' AND in_out='out' THEN DATE_FORMAT(`time_stamp`,'%T') ELSE '' END as pm_out1 
FROM attendance 
) as o 
GROUP BY empID, emp_day 

的SUBQ uery將所需列和主要查詢組格式化爲每位員工每天獲得一行。

編輯:here is a fiddle

+0

非常感謝你@moni_dragu。這正是我想要做的! – oozmac

+0

我想知道是否可以保留整個月份的日期,即使沒有記錄和登錄記錄?就像1月份一樣,**日**列必須填寫1到31.我應該爲DATE製作另一張表嗎?再次感謝你。 – oozmac

+0

你有更多的選擇來做到這一點。正如你所說,你可以爲日期建立一個單獨的表格,並將它與上面的子查詢結合起來。或者你可以在你的vb.net代碼中處理缺失的日子。 –

相關問題