Monday, April 11, 2011

MS access query using many tables

I have a database with 12 tables with pension details of employees for Jan-Dec 2008. I want to get the total pension for 12 months for each employee adding up amounts from all the 12 tables (jan through dec).

How should I write the query?

From stackoverflow
  • Why on earth do you have 12 different tables? That's a fundamentally bad design.

    Anyway...

    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
    
  • You may want to reconsider this design, and instead have a single table with a column to indicate MONTH and YEAR.

    Given your current design, your query will need to look like this (substituting your own table and field names, obviously):

    First, create this query and save it as "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;
    

    Second, create another query that refers to the first:

    SELECT
      [Monthly Totals].EmployeeNumber,
      SUM([Monthly Totals].Pension_Totals) AS Employee_Total
    FROM [Monthly Totals]
    GROUP BY [Monthly Totals].EmployeeNumber;
    

    Now save the second query and run it. It should give you what you need.

0 comments:

Post a Comment