我有一个包含12个表的数据库,其中包含2008年1月至12月的员工养老金详细信息。我希望每位员工获得12个月的总养老金,从所有12个表(jan到dec)中累计金额。
我该如何撰写查询?
答案 0 :(得分:6)
您可能需要重新考虑此设计,而是使用一个表格来指示MONTH和YEAR。
鉴于您当前的设计,您的查询将需要看起来像这样(显然替换您自己的表和字段名称):
首先,创建此查询并将其另存为“Monthly Totals”:
SELECT EmployeeId AS EmployeeNumber, SUM(Pension_Amount) AS Pension_Totals
FROM Pension_January
GROUP BY EmployeeId
UNION ALL
SELECT EmployeeId, SUM(Pension_Amount)
FROM Pension_February
GROUP BY EmployeeId
UNION ALL
.....Other months.....
UNION ALL
SELECT EmployeeId, SUM(Pension_Amount)
FROM Pension_December
GROUP BY EmployeeId;
其次,创建另一个引用第一个查询的查询:
SELECT
[Monthly Totals].EmployeeNumber,
SUM([Monthly Totals].Pension_Totals) AS Employee_Total
FROM [Monthly Totals]
GROUP BY [Monthly Totals].EmployeeNumber;
现在保存第二个查询并运行它。它应该给你你需要的东西。
答案 1 :(得分:3)
为什么你有12张不同的桌子?这是一个根本糟糕的设计。
总之...
Select
EmployeeID, Total2008 = Sum(Value)
From
(Select EmployeeID, Value From JanuaryTable
Union All
Select EmployeeID, Value From FebruaryTable
...
Select EmployeeID, Value From DecemberTable)
Group By
EmployeeID