如何在 MS Access 中创建 Pivot 以避免一种类型的记录出现空值?
Posted
技术标签:
【中文标题】如何在 MS Access 中创建 Pivot 以避免一种类型的记录出现空值?【英文标题】:How to Create Pivot in MS Access to avoid null values for one type of record? 【发布时间】:2016-07-15 09:12:21 【问题描述】:谁能帮我在 MS-Access 中创建下面的数据透视表。
数据表
value | Rank | Type
1.5 | 5 | alpha
2.4 | 4 | alpha
3.6 | 3 | alpha
4.63 | 2 | alpha
5.36 | 1 | alpha
必需的枢轴是
Type | 5 | 4 | 3 | 2 | 1
alpha|1.5 |2.4 |3.6 |4.63 |5.36
我已尝试以下查询
TRANSFORM [Value]
SELECT [Type]
FROM tbl
GROUP BY [Type], [Value]
PIVOT [Rank];
得到结果集
Type | 1 | 2 | 3 | 4 | 5
alpha| | | | |1.5
alpha| | | |2.4|
alpha| | |3.6| |
alpha| |4.63| | |
alpha|5.36| | | |
谁能帮我更新这个查询以获得所需的结果。
非常感谢。 亲爱的
【问题讨论】:
【参考方案1】:要在一行中获取所有“alpha”值,您必须从 GROUP BY 部分中删除 Value
。
那么你需要一个聚合函数 - 如果你确定每个等级只有一个值,First()
可以完成这项工作。
要获得 5-4-3-2-1 的顺序,请添加 ORDER BY 子句。
TRANSFORM First([Value])
SELECT [Type]
FROM tPivot
GROUP BY [Type]
ORDER BY [Rank] DESC
PIVOT [Rank];
编辑:它适用于多个Type
s
+-------+-----+-----+-----+------+------+
| Type | 5 | 4 | 3 | 2 | 1 |
+-------+-----+-----+-----+------+------+
| alpha | 1,5 | 2,4 | 3,6 | | 5,36 |
| beta | 999 | | | 4,63 | 66 |
+-------+-----+-----+-----+------+------+
【讨论】:
非常感谢安德烈。 :) 如果我们有两种类型怎么办。说 3 等级类型是 alpha,2 等级类型是 beta。相同的查询会起作用吗? @honey:请不要这样做。我遵循 ms-access 标签。如果我有时间,我会看到你的问题,如果我没有,我不会回答:) 安德烈 - 我找到了解决方案 :)【参考方案2】:CREATE TABLE #A
(
value NUMERIC(22,6), Rank INT, Type VARCHAR(10)
)
INSERT INTO #A VALUES
(1.5, 5,'alpha'),
(2.4,4,'alpha'),
(3.6,3,'alpha'),
(4.63,2,'alpha'),
(5.36,1,'alpha')
SELECT [5],[4],[3],[2],[1]
FROM
(select value,RANK,TYPE from #A ) AS SourceTable
PIVOT
(
MAX(value)
FOR RANK IN ([1],[2],[3],[4],[5])
) AS PivotTable;
【讨论】:
这是语法错误。因为 PivotTable 与 MS-Access 中的 Transform 关键字一起使用(根据我的理解)。以上是关于如何在 MS Access 中创建 Pivot 以避免一种类型的记录出现空值?的主要内容,如果未能解决你的问题,请参考以下文章