首页 > 解决方案 > 在 SQL 中创建数据透视表时不断收到错误消息

问题描述

我很难从 SQL 中的数据表生成数据透视表,因为我不断收到相同的错误消息并且不明白为什么。

我的初始表格具有以下形状(我只是过滤我将使用的表格):

== ID == | == Category == | == Description == | == ...
   ID1   |   Category_A   |   Description_1   |   ...
   ID2   |   Category_B   |   Description_2   |   ...
   ID3   |   Category_C   |   Description_3   |   ...
   ID3   |   Category_A   |   Description_4   |   ...
   ID1   |   Category_B   |   Description_2   |   ...
   ID4   |   Category_C   |   Description_3   |   ...
   ID5   |   Category_A   |   Description_1   |   ...
   ID2   |   Category_A   |   Description_1   |   ...
   ID2   |   Category_A   |   Description_4   |   ...
   ID5   |   Category_B   |   Description_2   |   ...
   ID4   |   Category_B   |   Description_6   |   ...
   ID4   |   Category_C   |   Description_7   |   ...

这是一个表格,其中每一行代表特定 ID 的事件描述。给定 ID 有许多事件描述,这就是为什么一个 ID 可以出现在多行上的原因。Category 列只是事件描述的类别。

从这张表中,我的最终目标是获得这样的东西:

== ID == | == Description_1 == | == Description_2 == | == Description_3 == | = ...
   ID1   |         1           |          2          |         2
   ID2   |         0           |          1          |         1
   ID3   |         2           |          0          |         1
   ID4   |         0           |          1          |         2
   ID5   |         0           |          3          |         0

有数千种不同的 ID 和数百种不同的描述。

这是我尝试过的代码:

WITH agg_table AS (
  SELECT ID, Description, COUNT(*) as description_count
  FROM original_table
  WHERE Category IN ('Category_A', 'Category_B', 'Category_D')
  GROUP BY ID, Description
  ORDER BY ID
)
SELECT *
FROM agg_table 
PIVOT (
      SUM(description_count) 
      FOR Description IN (SELECT DISTINCT Description
                          FROM original_table
                          WHERE Category IN ('Category_A', 'Category_B', 'Category_D'))
) AS pivot_table

从原始表中,我按 ID 和描述分组以获得一个 3 列的表,其中每一行给出特定 ID 的特定事件描述发生的次数(我还过滤以仅获取特定类别..)。然后我使用 pivot 函数对表格进行透视并获得我想要获得的内容:一个表格,其中每个 ID 有一行,每一列代表一个描述事件,单元格的值指示描述发生的次数对于给定的 ID。

问题是我不断收到以下错误消息:

Error in SQL statement: ParseException: mismatched input 'FROM' expecting <EOF>(line 1, pos 9)

我真的不知道代码中的问题在哪里。我在某处读到它可能是由别名引起的,但即使没有写别名,我仍然有问题。

我不知道这对我的情况有影响,但我正在使用带有 Spark 2.4.3、Scala 2.11 的数据块

提前感谢您的宝贵时间。如果有不清楚的地方,请告诉我,以便我提供更多细节。

祝你今天过得愉快!

标签: sqlpivotpivot-table

解决方案


推荐阅读