我不确定我想做什么是可能的,但如果可能的话,这可能是一个非常简单的解决方案,我无法弄清楚。一旦事情变得复杂,我的头开始旋转。请原谅我的无知。
我在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
任何人都可以帮助并解释我应该/需要做什么吗?
提前致谢!
答案 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");