如何在 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];

编辑:它适用于多个Types

+-------+-----+-----+-----+------+------+
| 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 以避免一种类型的记录出现空值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 2013 中创建只读表?

如何在 MS Access 中创建“只写”远程表?

如何在 Ms Access 中创建完全相同的东西?

如何在 MS Access 2007 中创建报告?

我可以在 MS Access 2010 中创建存储过程吗?

在 MS Access 中创建存储过程?