我正在尝试使用 LEFT JOIN 在 Access via SQL 中执行某些操作,但它似乎不起作用。 Access 不断生成错误“不支持 JOIN 表达式。”。
我想要完成的任务如下。我有一张 table ,上面有工作卡,另一张 table 的费用如下。
JOBCARDS
ID JOBNAME
1 Job one
2 Job two
3 Job three
COSTS
ID TYPE COST JOB
1 PART 15.01 1
2 LABOUR 20.00 1
3 LABOUR 40.00 2
4 PART 34.54 3
5 PART 84.67 3
我正在尝试制定一个 SQL 查询,该查询将给出以下结果:
QUERY
ID JOBNAME PARTS LABOUR
1 Job one 15.01 20.00
2 Job two 0.00 40.00
3 Job three 119.21 0.00
我想到了什么:
SELECT
CARDS.[ID] AS [ID],
CARDS.[JOBNAME] AS [JOBNAME],
SUM (COSTS1.[COST]) AS [PARTS],
SUM (COSTS2.[COST]) AS [LABOUR]
FROM
(([JOBCARDS] CARDS LEFT JOIN [COSTS] COSTS1 ON COSTS1.[JOB]=CARDS.[ID] AND COSTS1.[TYPE]='PART')
LEFT JOIN [COSTS] COSTS2 ON COSTS2.[JOB]=CARDS.[ID] AND COSTS2.[TYPE]='LABOUR')
GROUP BY
CARDS.[ID], CARDS.[JOBNAME];
Access 似乎对“COSTS1.[TYPE]='PART'”部分有问题。
有什么方法可以在不使用 LEFT JOIN 的情况下完成我想要做的事情吗? 或者有人发现错误了吗?
最佳答案
此 SQL 将给出结果。
0 值将为 Null,但您可以使用 NZ
将其替换为 0。
SELECT JobCards.ID
,JobName
,SUM(C2.Cost) AS Parts
,SUM(C1.Cost) AS Labour
FROM (JobCards LEFT JOIN Costs C1 ON (JobCards.ID = C1.Job AND C1.Type = 'Labour'))
LEFT JOIN Costs C2 ON (JobCards.ID = C2.Job AND C2.Type = 'Part')
GROUP BY JobCards.ID
,JobName
编辑:
重新阅读您的 SQL - 您只是忘记在 Join 中的 ON 语句后面加上括号:
(COSTS1.[JOB]=CARDS.[ID] AND COSTS1.[TYPE]='PART')
SELECT
CARDS.[ID] AS [ID],
CARDS.[JOBNAME] AS [JOBNAME],
SUM (COSTS1.[COST]) AS [PARTS],
SUM (COSTS2.[COST]) AS [LABOUR]
FROM
(([JOBCARDS] CARDS LEFT JOIN [COSTS] COSTS1 ON (COSTS1.[JOB]=CARDS.[ID] AND COSTS1.[TYPE]='PART'))
LEFT JOIN [COSTS] COSTS2 ON (COSTS2.[JOB]=CARDS.[ID] AND COSTS2.[TYPE]='LABOUR'))
GROUP BY
CARDS.[ID], CARDS.[JOBNAME];
编辑 2:无需将所有内容括起来,也不需要为字段名称添加别名(如果它们与源字段相同),或者在 SELECT< 中使用表名称
& WHERE
子句,除非字段名称出现在多个表中。
关于sql - Access SQL LEFT JOIN 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38897998/