SQL 根据日期键对列求和

SQL Summing columns based on date key

我有 link、DataSet

中给出的数据集

我想将“order_item_unit_status”列分隔为单独的列,并为相同的交易金额带来相应的交易金额。下面给出了所需的输出。

Objective是将txn_amt归并为各自的类别,并根据txn_date_key进行分组。 (基本上基于 order_item_unit_status 列进行旋转并分别带来 txn_amt。)

我使用了下面的代码,

Select *, CASE WHEN order_item_unit_status ='DELIVERED'
THEN txn_amt ELSE 0 END as DELIVERED, 
CASE WHEN order_item_unit_status ='RETURNED'
THEN txn_amt ELSE 0 END as RETURNED
from sales

获得了 link Output

中提到的输出

输出未根据 txn_date_key 和找到的多个行项目进行分组。如果我使用 GROUP BY txn_date_key 则会抛出错误。

我还被告知服务器受HiveSQL 支持,不支持使用“:”、日期时间和无法创建临时表。我目前还在考虑如何解决这些限制。

非常感谢帮助

您必须在 group by:

中使用您的专栏

编辑:SUM() 添加了正确的输出...

Select *, 

SUM(CASE WHEN order_item_unit_status ='DELIVERED'
THEN txn_amt ELSE 0 END) as DELIVERED, 

SUM(CASE WHEN order_item_unit_status ='RETURNED'
THEN txn_amt ELSE 0 END) as RETURNED

from sales
group by txn_amt,txn_date_key,order_item_unit_status

在 hivesql 中你可以使用 from_unixtime 命令

所有未聚合和选中的列都应分组。

此查询产生您需要的结果:

Select txn_date_key, 
       sum(CASE WHEN order_item_unit_status ='DELIVERED' 
                THEN txn_amt ELSE 0 END)                  as DELIVERED, 
       sum(CASE WHEN order_item_unit_status ='RETURNED'
                THEN txn_amt ELSE 0 END)                  as RETURNED
from sales
group by txn_date_key

结果:

txn_date_key    delivered   returned
20190701           3200     0
20210631           0        3000