多条记录加入Access SQL

多条记录加入Access SQL,sql,ms-access,multiple-tables,Sql,Ms Access,Multiple Tables,我不确定我想做的是否可能,但如果可能的话,这可能是一个非常简单的解决方案,我就是想不出来。但一旦事情变得复杂起来,我的脑袋就开始打转。请原谅我的无知 我在MSAccess2007中为一所学校运行了一个数据库,该学校有大量的表相互连接。我正在尝试创建一个查询,其中我从多个表中获取信息。我正在查找不同客户的销售和付款信息,从几个不同的链接表中提取信息。每笔销售分为四大类:课程费、注册费、书本费和其他。因为每个客户将有多个购买,所以每个购买都是Sales表中的一个单独条目。付款信息也在它自己的表中 我

我不确定我想做的是否可能,但如果可能的话,这可能是一个非常简单的解决方案,我就是想不出来。但一旦事情变得复杂起来,我的脑袋就开始打转。请原谅我的无知

我在MSAccess2007中为一所学校运行了一个数据库,该学校有大量的表相互连接。我正在尝试创建一个查询,其中我从多个表中获取信息。我正在查找不同客户的销售和付款信息,从几个不同的链接表中提取信息。每笔销售分为四大类:课程费、注册费、书本费和其他。因为每个客户将有多个购买,所以每个购买都是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
有人能帮我解释一下我应该/需要做什么吗


提前谢谢

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

说:

如果需要特定顺序,可以编辑属性页以包含列标题,也可以向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");

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

说:

如果需要特定顺序,可以编辑属性页以包含列标题,也可以向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");

好的,这是可行的,但我需要按一定的顺序使用它们,所以现在我运行一个查询,然后我运行一个交叉表查询,然后我必须运行第三个查询。事实证明,这远没有它应有的优雅和简单。给我一点时间,让我努力完成这件事,看看我是否能让它变得更优雅,但谢谢你的回答!交叉表查询就可以做到这一点(不过,我不需要总和,因此我实际上将该字段从最终表中删除,但无论如何都要对其运行转换)。干杯,非常感谢!!好的,这是可行的,但我需要按一定的顺序使用它们,所以现在我运行一个查询,然后我运行一个交叉表查询,然后我必须运行第三个查询。事实证明,这远没有它应有的优雅和简单。给我一点时间,让我努力完成这件事,看看我是否能让它变得更优雅,但谢谢你的回答!交叉表查询就可以做到这一点(不过,我不需要总和,因此我实际上将该字段从最终表中删除,但无论如何都要对其运行转换)。干杯,非常感谢!!