您无需在 Access 中为此创建查询。Word 有一个称为<<Next Record>>
强制移动到下一条记录的合并字段。如果您查看如何使用“邮件合并向导”创建标签文档,您会发现它是如何完成的。
更新 - 在 SQL 中执行此操作
简单SELECT
语句中的列派生自基础表/查询(或表达式)的列。如果要根据数据定义列,则需要使用交叉表查询。
首先为每个人创建一个带有运行计数的查询(例如您的表称为People
),并根据运行计数计算行和列位置:
SELECT People.id, Count(*)-1 AS RunningCount, int(RunningCount/4) AS RowNumber, RunningCount Mod 4 AS ColumnNumber
FROM People
LEFT JOIN People AS People_1 ON People.id >= People_1.id
GROUP BY People.id;
(您将无法在查询设计器中查看此内容,因为JOIN
不是与 比较,=
而是与比较>=
。)
此查询返回以下结果:
id Rank RowNumber ColumnNumber
1 0 0 0
2 1 0 1
3 2 0 2
4 3 0 3
5 4 1 0
6 5 1 1
假设此查询保存为Positions
,以下查询将返回结果:
TRANSFORM First(Item) AS FirstOfItem
SELECT RowNumber
FROM (
SELECT ID AS Item, RowNumber, "id" &( ColumnNumber + 1) AS ColumnHeading
FROM Positions
UNION ALL SELECT Name, RowNumber, "name" & (ColumnNumber +1)
FROM Positions
INNER JOIN People ON Positions.id = People.id
) AS AllValues
GROUP BY AllValues.RowNumber
PIVOT AllValues.ColumnHeading In ("id1","name1","id2","name2","id3","name3","id4","name4");
在UNION
那里,因此表中的每条记录People
将有两列 - 一列带有id
,一列带有name
。
该PIVOT
子句将列强制为指定的顺序,而不是按字母顺序(例如id1
,id2
... name1
,name2
...)