多条记录加入Access SQL
我不确定我想做的是否可能,但如果可能的话,这可能是一个非常简单的解决方案,我就是想不出来。但一旦事情变得复杂起来,我的脑袋就开始打转。请原谅我的无知 我在MSAccess2007中为一所学校运行了一个数据库,该学校有大量的表相互连接。我正在尝试创建一个查询,其中我从多个表中获取信息。我正在查找不同客户的销售和付款信息,从几个不同的链接表中提取信息。每笔销售分为四大类:课程费、注册费、书本费和其他。因为每个客户将有多个购买,所以每个购买都是Sales表中的一个单独条目。付款信息也在它自己的表中 我的SQL当前如下所示:多条记录加入Access SQL,sql,ms-access,multiple-tables,Sql,Ms Access,Multiple Tables,我不确定我想做的是否可能,但如果可能的话,这可能是一个非常简单的解决方案,我就是想不出来。但一旦事情变得复杂起来,我的脑袋就开始打转。请原谅我的无知 我在MSAccess2007中为一所学校运行了一个数据库,该学校有大量的表相互连接。我正在尝试创建一个查询,其中我从多个表中获取信息。我正在查找不同客户的销售和付款信息,从几个不同的链接表中提取信息。每笔销售分为四大类:课程费、注册费、书本费和其他。因为每个客户将有多个购买,所以每个购买都是Sales表中的一个单独条目。付款信息也在它自己的表中 我
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");
好的,这是可行的,但我需要按一定的顺序使用它们,所以现在我运行一个查询,然后我运行一个交叉表查询,然后我必须运行第三个查询。事实证明,这远没有它应有的优雅和简单。给我一点时间,让我努力完成这件事,看看我是否能让它变得更优雅,但谢谢你的回答!交叉表查询就可以做到这一点(不过,我不需要总和,因此我实际上将该字段从最终表中删除,但无论如何都要对其运行转换)。干杯,非常感谢!!好的,这是可行的,但我需要按一定的顺序使用它们,所以现在我运行一个查询,然后我运行一个交叉表查询,然后我必须运行第三个查询。事实证明,这远没有它应有的优雅和简单。给我一点时间,让我努力完成这件事,看看我是否能让它变得更优雅,但谢谢你的回答!交叉表查询就可以做到这一点(不过,我不需要总和,因此我实际上将该字段从最终表中删除,但无论如何都要对其运行转换)。干杯,非常感谢!!