【发布时间】:2009-03-04 18:52:39
【问题描述】:
我有一个数据库,其中包含 12 个表格,其中包含 2008 年 1 月至 12 月员工的养老金详细信息。我想从所有 12 个表格(从 1 月到 12 月)加起来每个员工的 12 个月的总养老金。
我应该如何编写查询?
【问题讨论】:
-
每月一张桌子?天啊。不应该这样做。
我有一个数据库,其中包含 12 个表格,其中包含 2008 年 1 月至 12 月员工的养老金详细信息。我想从所有 12 个表格(从 1 月到 12 月)加起来每个员工的 12 个月的总养老金。
我应该如何编写查询?
【问题讨论】:
您可能需要重新考虑这种设计,而是使用一个包含一列来指示 MONTH 和 YEAR 的表。
鉴于您当前的设计,您的查询需要如下所示(显然,替换为您自己的表和字段名称):
首先,创建此查询并将其保存为“每月总计”:
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;
现在保存第二个查询并运行它。它应该可以满足您的需求。
【讨论】:
到底为什么你有 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
【讨论】: