代码之家  ›  专栏  ›  技术社区  ›  Doonie Darkoo

只有当两个时间都存在时,计数才应返回

  •  0
  • Doonie Darkoo  · 技术社区  · 6 年前

    CREATE TABLE Attendance(
    [EmpCode] INT
    ,[TimeIn] DATETIME
    ,[TimeOut] DATETIME
    )
    INSERT INTO Attendance VALUES (12,      '2018-08-01 09:00:00.000',      '2018-08-01 17:36:00.000');
    INSERT INTO Attendance VALUES (12,      '2018-08-02 09:00:00.000',      NULL);
    INSERT INTO Attendance VALUES (12,      '2018-08-03 09:25:00.000',      '2018-08-03 16:56:00.000');
    INSERT INTO Attendance VALUES (12,      '2018-08-04 09:13:00.000',      NULL);
    INSERT INTO Attendance VALUES (12,      '2018-08-06 09:00:00.000',      '2018-08-07 18:15:00.000');
    INSERT INTO Attendance VALUES (12,      '2018-08-07 09:27:00.000',      NULL);
    

    SELECT 
    COUNT(CAST(COALESCE([TimeIn], [TimeOut]) AS DATE))
    FROM [dbo].[Attendance]
    WHERE
    CAST(COALESCE([TimeIn], [TimeOut]) AS DATE) BETWEEN '2018-08-01' AND '2018-08-07'
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Squirrel    6 年前

    只需添加一个 WHERE 状态检查 TimeOut

    SELECT 
        COUNT(CAST(COALESCE([TimeIn], [TimeOut]) AS DATE))
    FROM    
        [dbo].[Attendance]
    WHERE   
        [TimeOut] is not null
    and 
        CAST(COALESCE([TimeIn], [TimeOut]) AS DATE) BETWEEN '2018-08-01' AND '2018-08-07'