1

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

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

我的 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

谁能帮助并可能解释我应该/需要做什么?

提前致谢!

4

1 回答 1

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

如果您需要特定的顺序,您可以编辑属性表以包括列标题,或者您可以将 In 语句添加到 SQL。请注意,如果添加列标题,则无论数据是否可用,每列都将包含一列,更重要的是,如果未列出具有数据的列,则不会包含该列。

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");
于 2012-08-13T10:25:29.120 回答