Таким образом, объединение генерирует только два столбца store_ID и "Expense" (фактически Payroll_Expense)
Система не знает, что такое misc_expense и depreciation_expense;вот почему вы получаете запрос на оба.Это можно увидеть, если вы сделаете select * из своей производной таблицы следующим образом:
SELECT *
FROM (
SELECT Store_ID, Payroll_Expense Expense FROM [Payroll_Table]UNION ALL
SELECT Store_ID, Misc_Expense FROM [Misc_Table] UNION ALL
SELECT Store_ID, Depreciation_Expense FROM [Depreciation_Table]
) DerivedTable
Таким образом, исходя из этого, вы можете видеть, что нет столбца MISC_EXPENSE и Depreciation_Expense;все они свернуты в Payroll_Expense (Расход).Таким образом, производная таблица имеет только 2 столбца, а не 4, которые вы ожидали от внешнего выбора.Мы все еще можем получить 4;вам просто нужно использовать вариант 2 ниже;но нужно ли это?
Чтобы разрешить: Просто опустите Misc_Expense и Depreciation_Expense во внешнем запросе, так как они находятся в столбце «Расход» в результате и псевдоним столбца для потомков.
Имена столбцов и типы данных для каждого столбца в объединении наследуются от имен столбцов и типов данных первого запроса;если только null, то это первый встреченный тип данных.
Итак, мы можем просто сделать это:
SELECT Store_ID, SUM(Expense) AS Total
FROM (
SELECT Store_ID, Payroll_Expense AS Expense FROM [Payroll_Table]UNION ALL
SELECT Store_ID, Misc_Expense FROM [Misc_Table] UNION ALL
SELECT Store_ID, Depreciation_Expense FROM [Depreciation_Table]
) as DerivedTable
GROUP BY Store_ID
Если по какой-то причине вам все еще нужны все 3 столбца, тогда вам нужны заполнители для двух других столбцов.(ВАРИАНТ 2)
SELECT Store_ID, SUM(Payroll_Expense + Misc_Expense + Depreciation_Expense) AS Total
FROM (
SELECT Store_ID
, Payroll_Expense
, NULL as Misc_expense
, Null as Depreciation_expense
FROM [Payroll_Table] UNION ALL
SELECT Store_ID
, NULL as Payroll_Expense
, Misc_Expense
, Null as Depreciation_expense
FROM [Misc_Table] UNION ALL
SELECT Store_ID
, Null as Payroll_expense
, Null as Misc_expense
, Depreciation_Expense
FROM [Depreciation_Table]
) as DerivedTable
GROUP BY Store_ID