创建将在新表中生成总计字段的SQL

时间:2019-01-29 22:07:12

标签: sql ms-access

我有一个查询,该查询应基于TimesheetEntryID外键创建三个正在运行的总计字段。

我想为每个TimesheetEntryID值创建一个具有运行总计的临时表。但是,当我运行查询时,Access要求[小时累积临时] .TimesheetEntryID的特定值。我希望改为使用Access对每个TimesheetEntryID进行查询。这样,对于每个TimesheetEntryID,都会生成三个正在运行的总计字段。

我不明白为什么我的查询使Access想要[Hours Accumulation Temporary]的奇异值。TimesheetEntryID

My Query

1 个答案:

答案 0 :(得分:1)

运行相关子查询时,请使用别名在外部查询和子查询之间区分相同的命名源。当前,当您实际上要指向外部查询字段:[Daily Timesheet].TimesheetEntryID时,尝试使用打算在查询内部创建的非常表。

因此,只需使用适当的别名调整查询即可。下面显示了所有子查询都被 sub 引用,并与外部查询中的相应字母相连。此外,还包括一个附加条件,以匹配同一 EmployeeID

SELECT e.EmployeeName, d.TimesheetEntryID, 
       (SELECT SUM(sub_d.VacationHoursUsed - sub_d.VacationHours)
        FROM [Daily Timesheet] sub_d
        WHERE sub_d.TimesheetEntryID <= d.TimesheetEntryID
          AND sub_d.EmployeeID = d.EmployeeID) AS VacationHoursAvailable,

       (SELECT SUM(sub_d.BankedHoursUsed - sub_d.BankedHours)
        FROM [Daily Timesheet] sub_d
        WHERE sub_d.TimesheetEntryID <= d.TimesheetEntryID
          AND sub_d.EmployeeID = d.EmployeeID) AS BankedHoursAvailable,

       (SELECT SUM(sub_d.PersonalHoursUsed - sub_d.PersonalHours)
        FROM [Daily Timesheet] sub_d
        WHERE sub_d.TimesheetEntryID <= d.TimesheetEntryID
          AND sub_d.EmployeeID = d.EmployeeID) AS PersonalHoursAvailable

INTO [Hours Accumulation Temporary]

FROM [Employee Master] e 
INNER JOIN [Daily Timesheet] d ON e.EmployeeID = d.EmployeeID

ORDER BY e.EmployeeID, d.TimesheetEntryID