【问题标题】:MS Access SQL convert Rows to ColumnsMS Access SQL 将行转换为列
【发布时间】:2020-06-14 15:07:40
【问题描述】:

我需要一些帮助才能将包含行中数据的 MS Access 表转换为列。创建了一些适合我的场景的示例数据表。我需要将“Table 1”转换为“Table 3”。如果可能的话,使用“Table 2”来确定 Fruits 的列顺序。

我认为这可以使用 SQL Server 中的 Pivot 选项来完成。如何在 Access 数据库中实现相同的功能?

谢谢。

【问题讨论】:

    标签: sql ms-access ms-access-2016


    【解决方案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 中连接两列的扩展答案?
      猜你喜欢
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多