首页 > 解决方案 > AWS Athena 根据列值创建行

问题描述

我有一个显示简单订单详细信息的表格,如下所示

+---------+---------+---------+
| Order_id| Item_id |Quantity |
+---------+---------+---------+
| 10001   | 1       |   4     |
+---------+---------+---------+ 

现在我需要将每个数量显示为一个行项目,如下所示。

+---------+---------+---------+---------+
| Order_id| Item_id | Line_id |Quantity |
+---------+---------+---------+---------+
| 10001   | 1       | 1       |   1     |
+---------+---------+---------+---------+ 
| 10001   | 1       | 2       |   1     |
+---------+---------+---------+---------+ 
| 10001   | 1       | 3       |   1     |
+---------+---------+---------+---------+ 
| 10001   | 1       | 4       |   1     |
+---------+---------+---------+---------+ 

谁能帮助我如何编写查询来实现这一目标?

标签: sqlamazon-web-servicesprestoamazon-athena

解决方案


我们可以在这里尝试使用递归 CTE:

WITH cte AS (Order_id, Item_id, Line_id, Amount) AS (
    SELECT Order_id, Item_id, Quantity, 1
    FROM yourTable
    UNION ALL
    SELECT Order_id, Item_id, Line_id - 1, 1
    FROM cte
    WHERE Line_id - 1 >= 1
)

SELECT Order_id, Item_id, Line_id, Quantity
FROM cte
ORDER BY Order_id, Item_id, Line_id;

上面 CTE 中的逻辑是我们使用源表中的以下元组形成递归的基本情况:

(10001, 1, 4, 1)

也就是说,我们Line_id从 4 开始计数,在递归的每一步中减一。在递归案例结束时,我们达到了Line_id1 的值。


推荐阅读