交叉表查询显示每艘船每天的工作时间

时间:2017-06-24 14:12:02

标签: sql ms-access access-vba

我已经制作了一份交叉表查询,该查询应该提供有关我们在小港口的每艘船每天总工时的信息。

我的疑问:

TRANSFORM Sum(Main.WorkingH) AS SumOfWorkingH
SELECT DateValue([DeptDate]) AS [Date]
FROM Vessels INNER JOIN Main ON Vessels.ID = Main.VesselID
GROUP BY DateValue([DeptDate])
ORDER BY DateValue([DeptDate])
PIVOT Vessels.Vessel;

此处的问题是此查询返回从出发日期开始的总工作时间

|     +---------------+--------+----+----+----+----+----+----+                                                                                     |
|     |               |        |    |    |    |    |    |    |                                                                                     |
|     +---------------+--------+----+----+----+----+----+----+                                                                                     |
|     |     Date      |     A1 | A2 | A3 | F3 | F4 | F5 | F6 |                                                                                     |
|     |     26-May-17 |        |    | 32 | 29 |    |    |    |                                                                                     |
|     |     27-May-17 | 3      | 13 |    |    |    |    |    |                                                                                     |
|     |     28-May-17 |        |    |    |    |    |    | 73 |                                                                                     |
|     |     29-May-17 |        |    |    | 12 | 6  | 27 |    |                                                                                     |
|     |     01-Jun-17 |        |    | 10 |    | 7  | 41 |    |                                                                                     |
|     |     02-Jun-17 |        | 2  | 15 | 5  |    |    |    |                                                                                     |
|     |     03-Jun-17 |        | 4  |    |    |    |    |    |                                                                                     |
|     +---------------+--------+----+----+----+----+----+----+                                                                                     |

所需的结果

当一艘船在6/1 9pm离开并在6/3上午10点返回。这应该如下所示:

6/1-->3Hours
6/2-->24Hours
6/3-->10Hours
**NOT** 6/1-->37Hours as in the previous table.

它应该是这样的样子

|     +----------------+-----+----+----+----+--------+----+----+                                                                                   |
|     |        Date    |  A1 | A2 | A3 | F3 |   F4   | F5 | F6 |                                                                                   |
|     +----------------+-----+----+----+----+--------+----+----+                                                                                   |
|     |     26-May-17  |     |    |  5 |  7 |        |    |    |                                                                                   |
|     |     27-May-17  |   3 | 13 | 24 | 21 |        |    |    |                                                                                   |
|     |     28-May-17  |     |    |  2 |    |        |    |  9 |                                                                                   |
|     |     29-May-17  |     |    |    | 12 |      6 |  8 | 24 |                                                                                   |
|     |     30-May-17  |     |    |    |    |        | 18 | 24 |                                                                                   |
|     |     31-May-17  |     |    |    |    |        |    | 15 |                                                                                   |
|     |     01-Jun-17  |     |    | 10 |    |      7 |  0 |    |                                                                                   |
|     |     02-Jun-17  |     |  2 | 15 |  5 |     24 |    |    |                                                                                   |
|     |     03-Jun-17  |     |  4 |    |    |        | 16 |    |                                                                                   |
|     +----------------+-----+----+----+----+--------+----+----+                                                                                   |

这些值不准确(我手工编写),但我认为你有了想法

建议的解决方案

在尝试修复此问题时,我制作了以下代码,其中包含

Public Function HoursByDate1(stTime, EndTime)
For dayloop = Int(EndTime) To Int(stTime) Step -1
   If dayloop = Int(stTime) Then
   WorkingHours = Hour(dayloop + 1 - stTime)
   ElseIf dayloop = Int(EndTime) Then
   WorkingHours = Hour(EndTime - dayloop)
   Else
    WorkingHours = 24
    End If
        HoursByDate1 = WorkingHours
        Debug.Print "StartDate: " & stTime & ", EndDate:" & EndTime & ", The day:" & dayloop & "  --> " & WorkingHours & " hours."
Next dayloop
End Function

它打印数据如下:

这正是我想要的

但是当我尝试从我的查询中调用此函数时,它只获取每次旅行的最后一个值。如下:

|     +-----------+----+----+----+----+----+----+----+                                                                                             |
|     |   Date    | A1 | A2 | A3 | F3 | F4 | F5 | F6 |                                                                                             |
|     +-----------+----+----+----+----+----+----+----+                                                                                             |
|     | 5/26/2017 |    |    |  5 |  7 |    |    |    |                                                                                             |
|     | 5/27/2017 | 15 | 19 |    |    |    |    |    |                                                                                             |
|     | 5/28/2017 |    |    |    |    |    |    |  9 |                                                                                             |
|     | 5/29/2017 |    |    |    |  8 |  7 |  8 |    |                                                                                             |
|     | 6/1/2017  |    |    |  3 |    |  6 |  0 |    |                                                                                             |
|     | 6/2/2017  |    |  8 |  8 | 19 |    |    |    |                                                                                             |
|     | 6/3/2017  |    |  9 |    |    |    |    |    |                                                                                         

我寻求任何解决方案:从VBA方面或SQL查询方面。 很抱歉这个问题很长,但我想展示我在这个问题上的努力,因为每次我被告知这还不够信息

0 个答案:

没有答案