多个记录加入了Access SQL

时间:2012-08-13 09:31:47

标签: sql ms-access multiple-tables

我不确定我想做什么是可能的,但如果可能的话,这可能是一个非常简单的解决方案,我无法弄清楚。一旦事情变得复杂,我的头开始旋转。请原谅我的无知。

我在MS Access 2007中为一所学校运行了一个数据库,这个学校有很多表互相连接。我正在尝试创建一个查询,其中我从几个表中获取信息。我正在查找不同客户的销售和付款信息,从几个不同的链接表中提取信息。每笔销售分为4个类别之一,课程费,注册费,书费和其他。由于每个客户都有多次购买,因此每个客户都是Sales表中的单独条目。付款信息也在自己的表格中。

我的SQL目前看起来像这样:

    SELECT StudentContracts.CustomerID, (Customers.CFirstName & " " & Customers.CLastName) AS Name, Customers.Nationality, Courses.CourseTitle, (StudentContracts.ClassesBought + StudentContracts.GiftClasses) AS Weeks, StudentContracts.StartDate, Sales.SaleAmount, SaleType.SaleType, Sales.DueDate,  Payments.PaymentAmount

FROM (
    (
        (Customers INNER JOIN StudentContracts ON Customers.CustomerID = StudentContracts.CustomerID)
            INNER JOIN Payments ON Customers.CustomerID = Payments.CustomerID) 
    INNER JOIN 
        (SaleType INNER JOIN Sales ON SaleType.SalesForID = Sales.SalesForID) 
    ON Customers.CustomerID = Sales.CustomerID) 
INNER JOIN 
    (
        (Courses INNER JOIN Classes ON Courses.CourseID = Classes.CourseID)
     INNER JOIN StudentsClasses ON Classes.ClassID = StudentsClasses.ClassID)
 ON Customers.CustomerID = StudentsClasses.CustomerID;

这可以工作并提供我需要的信息。但是,我在每个销售中获得一条记录,如:

CustomerID  Name ... SaleAmount  SaleType  PaymentAmount
1           Bob      $600        Course    $1000
1           Bob      $300        RgnFee    $1000
1           Bob      $100        Book      $1000

我需要的是每个客户的一行,但每个销售类型都在其自己的列中,其价值字段中列出了销售额。如此:

CustomerID  Name ... Course  RgnFee  Book  Others  PaymentAmount
1           Bob      $600    $300    $100          $1000

任何人都可以帮助并解释我应该/需要做什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以从已创建的查询中创建交叉表。将查询添加到查询设计网格,从查询类型中选择交叉表,然后选择一行或多行,列和值。

说:

TRANSFORM Sum(t.SaleAmount) AS SumOfSaleAmount
SELECT t.ID, t.Name, Sum(t.SaleAmount) AS Total
FROM TableQuery t
GROUP BY t.ID, t.Name
PIVOT t.SaleType

如果需要某个订单,可以编辑属性表以包含列标题,也可以向SQL添加In语句。请注意,如果您添加列标题,则每列都会包含一列,无论数据是否可用,更重要的是,如果未列出包含数据的列

TRANSFORM Sum(t.SaleAmount) AS SumOfSaleAmount
SELECT t.ID, t.Name, Sum(t.SaleAmount) AS Total
FROM TableQuery t
GROUP BY t.ID, t.Name
PIVOT t.SaleType In ("Course","RgnFee","Book","Others");