0

我怎样才能从这个转换这个表

id name
1  sam
2  nick
3  ali
4  farah
5  josef
6  fadi

id1   name1   id2   name2   id3   name3   id4  name4
1     sam     2     nick    3     ali      4   farah
5     josef   6     fadi

我需要这个的原因是我有一个数据库,我需要使用 word 进行邮件合并,我想在一页上每 4 行打印一次,MS word 每页只能打印一行,所以使用 SQL 查询我想要一个行表示 4 行

提前致谢

阿里

4

1 回答 1

1

您无需在 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子句将列强制为指定的顺序,而不是按字母顺序(例如id1id2... name1name2...)

于 2012-12-05T20:25:56.580 回答