【问题标题】:Access Super Stuck With Tables访问超级卡在桌子上
【发布时间】:2018-10-12 19:47:09
【问题描述】:

我一直在尝试合并两个表,但无法完成。试图将员工人数添加到另一个表。

SELECT [Training History].JobID,(
       SELECT Job.Department 
       FROM Job 
       WHERE [Training History].JobID = Job.JobID) 
       AS Department, 
SUM([Expenditure]) AS ExpenditureOfJob 
     FROM [Training History] 
     GROUP BY [Training History].JobID,
(SELECT COUNT (*) AS [Number of Employees] 
     FROM Employee 
     GROUP BY JobID)
;

也试过了;

(SELECT COUNT (*) AS [Number of Employees] 
     FROM Employee 
    WHERE [Training History].JobID = Employee.JobID
 GROUP BY JobID)

说最后一位有语法错误,但我找不到。

【问题讨论】:

  • 请提供错误信息。
  • 这些真的是表或查询吗?通常聚合不会保存在表中。
  • @Parfait 两张图片都是查询,我做了一个中间人来尝试解决所有问题。

标签: mysql sql ms-access


【解决方案1】:

因为您正在运行不同的分组级别聚合查询(首先按 JobIDDepartment,然后仅按 JobID),请考虑加入它们作为派生表(即FROMJOIN 子句中的嵌套子查询):

SELECT agg1.JobID, agg1.Department, agg1.ExpenditureOfJob, agg2.[Number of Employees]
FROM
  (SELECT t.JobID, j.Department, SUM([Expenditure]) AS ExpenditureOfJob 
   FROM [Training History] t
   INNER JOIN Job j ON t.JobID = j.JobID
   GROUP BY t.JobID, j.Department) As agg1

   INNER JOIN
  (SELECT t.JobID, Count(*) AS [Number of Employees]
   FROM [Training History] t
   GROUP BY t.JobID) As agg2

ON agg1.JobID = agg2.JobID

或加入您已保存的查询:

SELECT agg1.*, agg2.[Number of Employees]
FROM
  mySavedQueryAgg1 as agg1

INNER JOIN
  mySavedQueryAgg2 as agg2

ON agg1.JobID = agg2.JobID

【讨论】:

  • 前一个工作完美,除了员工人数的输出不正确,每个工作应该是 4,但每个工作显示 16。
  • 知道为什么吗?我试图找出它,但我找不到错误。
  • 请显示您的屏幕截图查询的底层 SQL。您可能有另一个分组未显示。此外,这里的第二个只是两个屏幕截图查询的连接(当然将 mySavedQueryAgg# 更改为实际名称)。
  • 找到了,我把agg2改成了下面的(编辑了你的帖子)
【解决方案2】:

您只需要一个简单的JOIN。 (More info here)

根据JobID 组合示例表中的数据:

SELECT
  [Training History].*,
  JobID.*
FROM
  [Training History] left **inner join** JobID
  ON [Training History].JobID = Job.JobID

这只是最简单的连接形式;你可以做的还有很多,这可能会更好地适用于你的真实数据和需求。谷歌“在 Access 中加入表”。

Also Access 的查询设计器可以更轻松地完成此类任务,因为它会为您“编写”SQL。

【讨论】:

  • @Parfait 确实如此,谢谢。 (我整个星期都在使用 SQL Server...)...在 Access 中使用查询设计器的另一个优势示例!
【解决方案3】:

我相信ashleedawg 所说的是真的。但是,由于您使用的是 MS Access,这种类型的 SQL 字符串很可能无法正常工作。

据我所知,在这种情况下,没有任何版本的 MS Access 支持 SQL。 (虽然我可能错了)

如果上面提到的不起作用,试试这个:

SELECT * 
FROM [Training History]
INNER JOIN Employee ON Employee.JobID = [Training History].JobID

编辑:

为简单起见(这是在查询 [Design Tab] 的设计视图中):

【讨论】:

  • 在解释中添加了一些内容,希望对您有所帮助。
猜你喜欢
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多