多行合二为一
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 的练习,为了清楚起见,我将它们分开。
我正在处理 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 的练习,为了清楚起见,我将它们分开。