我正在使用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 | |
因此一行中有多个标题。如何建立此查询?
谢谢!
答案 0 :(得分:0)
这是一项艰巨的任务。首先,我们创建列名称。我们通过对ID高于当前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
对于读者来说,我将使用子查询合并这些查询作为练习,为了清楚起见,我将它们拆分。