多行合二为一

Multiple rows into one

我正在处理 MS Access 2010 数据库,我为此遇到的问题比预期的要多。

我有这些表:

    tblBook:
    IDBook (key)
    Title

    tblUser:
    IDUser (key)
    Username

    tblOrder:
    IDOrder (key)
    IDUser (linked to tblUser)
    Date

    tblOrderBook:
    IDOrderBook (key)
    IDOrder (linked to tblOrder)
    IDBook (linked to tblBook)

用户每个订单最多可以挑选 3 本书。我做了一个像这样显示它们的查询,IDOrderBook:

IDOrderBook |IDOrder | Username | Date | Title

6           |3       | John     | Aug 1| Harry Potter
5           |3       | John     | Aug 1| Lord of the Rings
4           |2       | Susan    | Jul 5| The Shining
3           |2       | Susan    | Jul 5| Huck Finn
2           |2       | Susan    | Jul 5| Peter Pan
1           |1       | Rita     | Jul 4| Harry Potter

现在我想要像这样按 IDOrder 向他们展示的内容:

IDOrder | Username | Date | Title1       | Title2    | Title3

3       | John     | Aug 1| Harry Potter | LoTR      |
2       | Susan    | Jul 5| The Shining  | Huck Finn | Peter Pan 
1       | Rita     | Jul 4| Harry Potter |           | 

所以在一行中有多个标题。如何构建此查询?

谢谢!

这是一项相当艰巨的任务。首先,我们创建列名。我们通过计算 ID 高于当前记录的每条记录来做到这一点。然后,我们旋转该列名称,创建 t

我将根据您共享的查询来确定所有这些查询。我们称之为 qry1.

创建列名的查询,qry2:

SELECT IDOrderBook, IDOrder, Username, Date, Title, 
    "Title" & (
        SELECT Count(*) 
        FROM qry1 s 
        WHERE q.IDOrder = s.IDOrder AND q.IDOrderBook >= s.IDOrderBook
    ) As ColumnName
FROM qry1 q

然后,我们使用数据透视表(交叉表)查询来创建您想要的结果:

TRANSFORM First(Title)
SELECT IDOrder, Username, Date
FROM qry2
GROUP BY IDOrder, Username, Date
Pivot ColumnName

我将使用子查询合并这些查询作为 reader 的练习,为了清楚起见,我将它们分开。