2

我在尝试为此示例数据库编写查询时遇到困难:3 个表 = 程序代码、工作、工作代码。Program Code 表通过 Work Code 表与 Work 表有多对多的关系。表格布局如下:

Work: ID,Employee ID, Type of work, description, hours
Work code: ID, Program Code, Work ID
Program Code: Program Code

现在员工将完成一项工作,但必须为该工作收取多个代码。这会在“工作代码”表中创建许多记录。我想创建一个查询,该查询将提取员工 ID、工作类型、描述、小时数并链接用于该 1 个工作条目的所有程序代码。我有一个正在运行的查询,但它为每个程序代码创建一行,而不是在一个字段中包含所有程序代码的 1 行。这是带有 SQL 后端的 Access 前端。

这就是我现在所拥有的:

SELECT Work.ID, Work.[Employee ID], Work.[Type of work], Work.description, Work.hours, [Work Code].[Program Code]
FROM [Work Code] INNER JOIN [Work] ON [Work Code].[Work ID] = Work.ID;

但我希望它在每个工作 ID 的一个字段中包含程序代码。

4

1 回答 1

0

我能想到的唯一解决方案可能不是您正在寻找的——使用 GROUP BY 语句。

SELECT Work.ID, Work.[Employee ID], Work.[Type of work], Work.description, 
Sum(Work.hours) as SumOfHours, [Work Code].[Program Code]
FROM [Work Code] INNER JOIN [Work] ON [Work Code].[Work ID] = Work.ID
GROUP BY Work.ID, Work.[Employee ID], 
Work.[Type of work], Work.description, [Work Code].[Program Code];

我不知道 SQL 中有任何方法可以将多个连接的行强制转换为单行中的单个字段。当我需要这种功能时,我通常会使用真正肮脏的技巧来存储,在这种情况下,工作表中以逗号分隔格式的程序代码。我使用代码将它们带到那里,通常是在输入程序代码时。

作为旁注,我建议您停止在表名和字段名中使用空格。没有括号,SQL 更容易读写。使用表别名是另一种使 SQL 更具可读性的便捷方法。

通过一些更改,您的 SQL 可能看起来像这样:

SELECT w.ID, w.EmployeeID, w.WorkType, w.Description, 
Sum(w.hours) as SumOfHours, wc.ProgramCode
FROM WorkCode AS wc INNER JOIN Work AS w ON wc.WorkID = w.ID
GROUP BY w.ID, w.EmployeeID, 
w.WorkType, w.Description, wc.ProgramCode;
于 2013-08-30T03:58:53.907 回答