Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我删除了HoursWorked列,则此数据将不包含任何聚合数据,而只是基表之间简单联接的结果,这使我处于相同的位置。@BrandonMoore:您使用的是哪种SQL(Oracle、SQLServer等)?另外,是否要按一天中的小时显示明细,而不显示日期_Sql_Crystal Reports - Fatal编程技术网

如果我删除了HoursWorked列,则此数据将不包含任何聚合数据,而只是基表之间简单联接的结果,这使我处于相同的位置。@BrandonMoore:您使用的是哪种SQL(Oracle、SQLServer等)?另外,是否要按一天中的小时显示明细,而不显示日期

如果我删除了HoursWorked列,则此数据将不包含任何聚合数据,而只是基表之间简单联接的结果,这使我处于相同的位置。@BrandonMoore:您使用的是哪种SQL(Oracle、SQLServer等)?另外,是否要按一天中的小时显示明细,而不显示日期,sql,crystal-reports,Sql,Crystal Reports,如果我删除了HoursWorked列,则此数据将不包含任何聚合数据,而只是基表之间简单联接的结果,这使我处于相同的位置。@BrandonMoore:您使用的是哪种SQL(Oracle、SQLServer等)?另外,是否要按一天中的小时显示明细,而不显示日期?乍一看,这似乎可以在24小时内运行,但如果运行时间较长,则从每天开始累计相同的小时数。我接着做了一个小时分钟的表格,然后交叉加入他们。。。但除此之外,这似乎符合我的想法。我会让你知道它是如何进行的,并且+1表示它是否有效,因为我在这里看到了一


如果我删除了HoursWorked列,则此数据将不包含任何聚合数据,而只是基表之间简单联接的结果,这使我处于相同的位置。@BrandonMoore:您使用的是哪种SQL(Oracle、SQLServer等)?另外,是否要按一天中的小时显示明细,而不显示日期?乍一看,这似乎可以在24小时内运行,但如果运行时间较长,则从每天开始累计相同的小时数。我接着做了一个小时分钟的表格,然后交叉加入他们。。。但除此之外,这似乎符合我的想法。我会让你知道它是如何进行的,并且+1表示它是否有效,因为我在这里看到了一些我以前没有想到的有用的东西。(也许我把时间加起来是错的…我会在周一测试并让你知道)哦,顺便说一句,用户将指定运行报告的时间范围。@BrandonMoore我认为它应该在多天内工作,因为小时和分钟是在cte中添加到每天的,然后这就是它的分组。。。然而,如果有一天没有任何活动,那么这一天将不在cte中,也不会有任何总数。将此标记为答案,因为它是这里最好(也是唯一)的一天。但最终采取了一种稍有不同的方法:乍一看,它似乎可以在24小时内工作,但如果运行更长的时间,则从每天开始累计相同的时间。我接着做了一个小时分钟的表格,然后交叉加入他们。。。但除此之外,这似乎符合我的想法。我会让你知道它是如何进行的,并且+1表示它是否有效,因为我在这里看到了一些我以前没有想到的有用的东西。(也许我把时间加起来是错的…我会在周一测试并让你知道)哦,顺便说一句,用户将指定运行报告的时间范围。@BrandonMoore我认为它应该在多天内工作,因为小时和分钟是在cte中添加到每天的,然后这就是它的分组。。。然而,如果有一天没有任何活动,那么这一天将不在cte中,也不会有任何总数。将此标记为答案,因为它是这里最好(也是唯一)的一天。但最终采取了一种稍微不同的方法:
EmployeeID  InTime   OutTime  PayRate  OTRate  DTRate
6           59:09.0  05:17.0  10.75    16.13   21.5
6           33:45.0  54:58.0  10.75    16.13   21.5
6           59:25.0  24:07.0  10.75    16.13   21.5
6           55:18.0  29:35.0  10.75    16.13   21.5
6           59:50.0  02:17.0  10.75    16.13   21.5
7           00:45.0  40:48.0  9.25     13.88   18.5
7           00:21.0  58:41.0  9.25     13.88   18.5
13          00:34.0  27:46.0  9        13.5    18
6           55:23.0  11:02.0  10.75    16.13   21.5
6           37:03.0  30:32.0  10.75    16.13   21.5
Hour   Labor Cost

1:00       $
2:00       $
3:00       $
4:00       $
5:00       $
etc.
-- Assume that there is a tblNumbers table
--  that has been populated with at least the values 0 to 60.
-- First, we need to find the days for which there are time records.
; WITH Days_cte (MyDay) AS
(
    SELECT DISTINCT
        -- Strip off the time from the date.  
        DATEADD(DAY, DATEDIFF(DAY, 0, InTime), 0) AS MyDay
    FROM tblTimeSheet

    UNION

    SELECT DISTINCT
        -- Strip off the time from the date.  
        DATEADD(DAY, DATEDIFF(DAY, 0, OutTime), 0) AS MyDay
    FROM tblTimeSheet
),
-- Next, explode this into hours AND minutes for every day.
-- This cte will contain 1440 records for every day.
Times_cte (MyTime) AS
(
    SELECT
        DATEADD(MINUTE, minutes.Number, 
                DATEADD(HOUR, hours.Number, days.MyDay)) AS MyTime
    FROM
        Days_cte days JOIN
        tblNumbers hours ON hours.Number < 24 JOIN
        tblNumbers minutes ON minutes.Number < 60 LEFT JOIN
)
-- Now, determine which of these minutes 
--  falls between an employee's in and out time.
SELECT
    -- Strip off the minutes, leaving only the hour.
    DATEADD(HOUR, DATEDIFF(HOUR, 0, times.MyTime), 0) AS [Hour],
    -- Divide by 60, since the aggregation is done by the minute.
    SUM(ISNULL(ts.PayRate, 0) / 60) AS LaborCost
FROM    
    Time_cte times LEFT JOIN
    tblTimeSheet ts ON times.MyTime BETWEEN ts.InTime AND ts.OutTime
GROUP BY
    DATEADD(HOUR, DATEDIFF(HOUR, 0, times.MyTime), 0)