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 查询,它使用 TRANSFORMPIVOT 子句。 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 子句中连接OrderFruit 列:

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 将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL 中使用“Pivot”将行转换为列

SQL:将行转换为列

Oracle SQL 将行转换为列

SQL Server 将行数据转换为列标题

Redshift SQL - 将行按 id 转换为列

BigQuery 标准 SQL 如何将行转换为列