正确使用MS Access Query / Linq

时间:2015-06-22 05:05:01

标签: c# linq ms-access

我有这张表

TBLAttendance

  • EmployeeCode int(主键)
  • LogType int(0 =登录,1 =登出,2 =登录,3 =登出)
  • TimeLog datetime

我想以下列格式为每位员工提供输出

| EmployeeCode | AM_LOG_IN | AM_LOG_OUT | PM_LOG_IN | PM_LOG_OUT |
|--------------|-----------|------------|-----------|------------|
| 12345        | 09:30:01  | 12:02:04   | 13:15:06  | 18:05:02   |

我正在使用MSAccess,请帮助我使用正确的查询/方法。 我能用很多代码做到这一点,但我不喜欢我的解决方案。 我可以使用LINQ ..

2 个答案:

答案 0 :(得分:0)

试试这个,

SELECT A.EmployeeCode, A.AM_LOG_IN, A.AM_LOG_OUT, A.PM_LOG_IN, A.PM_LOG_OUT FROM(
SELECT EmployeeCode, TimeLog AS AM_LOG_IN  FROM TBLAttendance
WHERE LogType = 0

UNION

SELECT EmployeeCode, TimeLog AS AM_LOG_OUT  FROM TBLAttendance
WHERE LogType = 1

UNION

SELECT EmployeeCode, TimeLog AS PM_LOG_IN  FROM TBLAttendance
WHERE LogType = 2

UNION

SELECT EmployeeCode, TimeLog AS PM_LOG_OUT  FROM TBLAttendance
WHERE LogType = 3
) A
GROUP BY A.EmployeeCode

答案 1 :(得分:0)

以Madhawas为出发点:

SELECT 
    A.EmployeeCode, 
    Sum(A.AI) AS AM_LOG_IN, 
    Sum(A.AO) AS AM_LOG_OUT, 
    Sum(A.PI) AS PM_LOG_IN, 
    Sum(A.PO) AS PM_LOG_OUT 
FROM
    (SELECT 
        EmployeeCode, 
        TimeLog AS AI, Null AS AO, Null AS PI, Null AS PO  
    FROM TBLAttendance
    WHERE LogType = 0

    UNION ALL

    SELECT 
        EmployeeCode, 
        Null AS AI, TimeLog AS AO, Null AS PI, Null AS PO  
    FROM TBLAttendance
    WHERE LogType = 1

    UNION ALL

    SELECT 
        EmployeeCode, 
        Null AS AI, Null AS AO, TimeLog AS PI, Null AS PO  
    FROM TBLAttendance
    WHERE LogType = 2

    UNION ALL

    SELECT 
        EmployeeCode, 
        Null AS AI, Null AS AO, Null AS PI, TimeLog AS PO  
    FROM TBLAttendance
    WHERE LogType = 3
    ) AS A
GROUP BY A.EmployeeCode