MS Access SQL 将行转换为列
Posted
技术标签:
【中文标题】MS Access SQL 将行转换为列【英文标题】:MS Access SQL convert Rows to Columns 【发布时间】:2020-06-14 15:07:40 【问题描述】:我需要一些帮助才能将包含行中数据的 MS Access 表转换为列。创建了一些适合我的场景的示例数据表。我需要将“Table 1”转换为“Table 3”。如果可能的话,使用“Table 2”来确定 Fruits 的列顺序。
我认为这可以使用 SQL Server 中的 Pivot 选项来完成。如何在 Access 数据库中实现相同的功能?
谢谢。
【问题讨论】:
【参考方案1】:列顺序由列标题中的值决定。可以连接 Fruit 和 Order 字段:Order & "-" & Fruit AS OrderFruit
。
使用查询设计器构建查询,将 Fruit 字段上的 Table1 和 Table2 与该计算字段连接起来,然后切换到 CROSSTAB 完成。
【讨论】:
【参考方案2】:考虑 MS Access 的 crosstab 查询,它使用 TRANSFORM
和 PIVOT
子句。 PIVOT
中的 IN
列表指定列的顺序和外观(省略或不省略)。
TRANSFORM MAX(t1.Export) AS MaxExport
SELECT t1.Country
FROM table1 t1
GROUP BY t1.Country
PIVOT t1.Fruit IN ('Apple', 'Kiwi', 'Mango', 'Grapes', 'Pear')
对于带有数字周期列标题的所需顺序,只需连接第二个表并在PIVOT
子句中连接Order
和Fruit
列:
TRANSFORM MAX(t1.Export) AS MaxExport
SELECT t1.Country
FROM table1 t1
INNER JOIN table2 t2
t1.Fruit = t2.Fruit
GROUP BY t1.Country
PIVOT t2.[Order] & "." & t1.Fruit
【讨论】:
谢谢冻糕。它确实奏效了。我只需要加入表 2 来指示顺序。原始数据有一长串问题,这些问题将被转换成列。我用 FruitOrder 替换了 Order 列,并首先连接了订单号(例如 - “1.Apple”)知道如何加入并使其可行吗? TRANSFORM MAX(t1.Export) AS MaxExport SELECT t1.Country FROM table1 t1 INNER JOIN Table2 t2 ON t1.Fruit = t2.Fruit; GROUP BY t1.Country PIVOT t2.FruitOrder 您尝试的查询出了什么问题?请参阅在PIVOT
中连接两列的扩展答案?以上是关于MS Access SQL 将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章