我正在更新这个,因为之前的答案不是我真正需要的。
我的Access数据库中有两个表。一个叫比林斯,一个叫做预订。每个表都有一个名为Booking Number的列,它们是相关的。 Billings表还有一个名为Container的字段。我想做的是:
以下是我的表格:
Bookings
----------------
ID | Booking Number
1 | '1234'
2 | '1235'
Billings
----------------
ID | Booking Number | Container
1 | '1234' | '12'
2 | '1234' | '16'
3 | '1235' | '18'
根据这两个表,应该有预订#1234和预订#1235的报告。预订#1234的报告应该列出容器的12和16,而Booking#1235的报告只列出18.我是PHP / MySQL开发人员,所以我理解SQL查询。但是,我为MySQL编写查询的方式显然不适用于Access。目前我正在使用类似于下面答案的模块,但它没有做我需要它做的事情。这是我目前的查询:
SELECT
b.*,
ListContainers(b.[Booking Number]) AS Containers
FROM
Bookings AS b
WHERE
((b.[Booking Number]) Is Not Null);
这将创建一个逗号分隔的与每个预订编号关联的容器列表,但我想为每个Container创建一个单独的行,其中还包括Billings表中的其他信息。
有没有人有类似情况的经验,或者知道我可以采取哪些步骤来完成我想要做的事情?
答案 0 :(得分:1)
[这是我在“规范”改变之前对原始问题的回答。]
在Access中创建一个新的Module
并粘贴以下代码
Public Function ListContainers(Booking_Number As String) As String
Dim cdb As DAO.Database, rst As DAO.Recordset, rtn As String
Const Separator = ", "
Set cdb = CurrentDb
rtn = ""
Set rst = cdb.OpenRecordset("SELECT Container FROM Billings WHERE [Booking Number]=""" & Booking_Number & """ ORDER BY Container", dbOpenSnapshot)
Do While Not rst.EOF
rtn = rtn & rst!Container & Separator
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set cdb = Nothing
If Len(rtn) > 0 Then
rtn = Left(rtn, Len(rtn) - Len(Separator)) '' trim trailing separator
End If
ListContainers = rtn
End Function
然后,您可以在查询中使用该功能,例如
SELECT [Booking Number], ListContainers([Booking Number]) AS Containers
FROM Billings
那将返回
Booking Number Containers
-------------- ----------
1234 12, 16
1235 18
答案 1 :(得分:1)
对于新要求,您需要使用“子报告”列出容器(和相关信息)。有关详细信息,请参阅我最近对类似问题here的回答。