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