SQL Union Query — две таблицы доступа

У меня есть два одинаковых запроса в MS Access, qryLabour и qryMaterials. Мне нужно получить сумму из трех полей: Labour Mins, Laser Mins и $ Cost.

Я знаю, что это можно сделать с помощью запроса на объединение, но прошло много времени с тех пор, как я его использовал, и я продолжаю получать «Ошибка в выражении FROM».

Мой SQL:

SELECT sum(TotalLabour) as TotalLabour,sum(TotalCost) as TotalCost,sum(TotalLaser) as TotalLaser
FROM

(
SELECT Sum([qryLabour].[Labour Mins]) AS TotalLabour, Sum([qryLabour].[$ Cost]) AS TotalCost, Sum([qryLabour].[Laser Mins]) AS TotalLaser
FROM qryLabour;

union all

SELECT Sum([qryMaterial].[Labour Mins]) AS TotalLabour, Sum([qryMaterial].[$ Cost]) AS TotalCost, Sum([qryMaterial].[Laser Mins]) AS TotalLaser
FROM qryMaterial;

)

Пожалуйста, может кто-нибудь посоветовать, где я ошибаюсь? Если я удаляю оператор верхнего уровня «Выбрать», я получаю две строки с итоговыми значениями в них, когда я добавляю оператор верхнего уровня, чтобы объединить два.


person Walshie1987    schedule 06.03.2019    source источник
comment
Возможно, добавление псевдонима в закрывающую скобку решит проблему ) M, но не уверен   -  person Jaydip Jadhav    schedule 06.03.2019
comment
Уберите эти точки с запятой. (;)   -  person jarlh    schedule 06.03.2019


Ответы (2)


Обратите внимание, но я думаю, вам нужен псевдоним:

SELECT sum(u.TotalLabour) as TotalLabour,sum(u.TotalCost) as TotalCost,sum(u.TotalLaser) as TotalLaser
FROM

(
SELECT Sum([qryLabour].[Labour Mins]) AS TotalLabour, Sum([qryLabour].[$ Cost]) AS TotalCost, Sum([qryLabour].[Laser Mins]) AS TotalLaser
FROM qryLabour

union all

SELECT Sum([qryMaterial].[Labour Mins]) AS TotalLabour, Sum([qryMaterial].[$ Cost]) AS TotalCost, Sum([qryMaterial].[Laser Mins]) AS TotalLaser
FROM qryMaterial

) as u

изменить: также удалить ";" внутри подзапроса, как предложил @jarlh

person Patrick Honorez    schedule 06.03.2019

Спасибо Джейдип.

На самом деле я только что понял это, у меня было ; в конце внутренних операторов SELECT, я удалил это и сделал имена в родительском SELECT уникальными. Отлично работает сейчас.

Итак, правильный код:

SELECT sum( tempTotalLabour) as TotalLabour,sum( tempTotalCost) as TotalCost,sum( tempTotalLaser) as TotalLaser
FROM

(
SELECT Sum([qryLabour].[Labour Mins]) AS tempTotalLabour, Sum([qryLabour].[$ Cost]) AS  tempTotalCost, Sum([qryLabour].[Laser Mins]) AS tempTotalLaser
FROM qryLabour

union all

SELECT Sum([qryMaterial].[Labour Mins]) AS  tempTotalLabour, Sum([qryMaterial].[$ Cost]) AS  tempTotalCost, Sum([qryMaterial].[Laser Mins]) AS  tempTotalLaser
FROM qryMaterial

) ;

Ура Крис

person Walshie1987    schedule 06.03.2019