使用 MS Access Query 反透视或转换数据

Posted

技术标签:

【中文标题】使用 MS Access Query 反透视或转换数据【英文标题】:Unpivot or transform data using MS Access Query 【发布时间】:2020-12-28 09:18:54 【问题描述】:

大师们下午好!

我希望具有 Access 和 SQL 经验(和时间)的人能够编写一些我可以在 MS Access 中使用来转换/取消透视某些数据的 SQL 代码。我想这有点像一个 unpivot。

当前表“tbl_Weekly_Forecast”的结构是这样的;

Item      | A  | B  | C  | D  |
-------------------------------
61000224  | 1  | 2  | 3  | 4  |
64000123  | 25 | 25 | 25 | 25 |
66400005  | 38 | 38 | 37 | 37 |

想要的查询输出是这样的;

Item      | Period | Forecast |
-------------------------------
61000224  |    A   |    1     |
61000224  |    B   |    2     |
61000224  |    C   |    3     |
61000224  |    D   |    4     |
64000123  |    A   |    25    |
64000123  |    B   |    25    |
64000123  |    C   |    25    |
64000123  |    D   |    25    |
66400005  |    A   |    38    |
66400005  |    B   |    38    |
66400005  |    C   |    37    |
66400005  |    D   |    37    |

表“tbl_Weekly_Forecast”中实际上有 24 列需要取消透视,所以我希望能够在 SQL 代码中扩展或添加列名并自己扩展。

我花了大约一天的时间尝试其他在这里提出类似问题的人的建议,但不幸的是,他们几乎没有 SQL 经验并且到目前为止都失败了。任何帮助将不胜感激!

谢谢!

【问题讨论】:

【参考方案1】:

您可以简单地使用UNION ALL,如下所示:

SELECT ITEM, 'A' PERIOD, A AS FORECAST FROM YOUR_TABLE
UNION ALL
SELECT ITEM, 'B' PERIOD, B AS FORECAST FROM YOUR_TABLE
UNION ALL
SELECT ITEM, 'C' PERIOD, C AS FORECAST FROM YOUR_TABLE
UNION ALL
SELECT ITEM, 'D' PERIOD, D AS FORECAST FROM YOUR_TABLE

【讨论】:

谢谢大力水手!我必须做的唯一调整是将 AS 放在 PERIOD 之前,然后它就像一个魅力!非常感谢,非常感谢!

以上是关于使用 MS Access Query 反透视或转换数据的主要内容,如果未能解决你的问题,请参考以下文章

Access SQL 中的反透视

编译或反编译 MS Access MDB 文件有啥作用?

MS Access 中的透视查询

MS Access 中的透视查询

基于包含子查询的查询的 ms-access 交叉表查询

如何通过 Python 3.5.1 创建永久 MS Access Query?