我有一张结构如下的table:
不幸的是 sale_date
存储为int,我必须找到一种方法在季度内转换它(202001将是q1)。转换工作得很好,但我还需要包含一些基于此转换的计算列。基本上,我需要计算第一季度每个产品的总价格,以及每个卖家在当年记录的“产品x”和“产品y”占总价格的百分比。我知道我可以很容易地获得这些使用组,但我转换的方式日期( sale_date
)从一个季度到另一个季度都在影响着结果。
SELECT
seller,
product_name,
LEFT([sale_date],4) Year,
'Q'+ CAST((CAST(RIGHT(sale_date,2) AS INT)-1 )/3 +1 AS varchar) Quarter,
(price),
price * 100.0 / sum(price) over () as percentage_total,
SUM (price) as total_sales
FROM table1
GROUP BY
LEFT(sale_date,4),
'Q'+ CAST((CAST(RIGHT(sale_date,2) AS INT) -1 )/3 +1 AS varchar),
seller,
product_name,
price
1条答案
按热度按时间koaltpgm1#
注意:您应该始终为列使用正确的数据类型。它可以避免很多问题。始终将日期值存储在
date
数据类型。我建议你先把
INT
更新数据类型,然后使用DATE
用于计算季度名称的函数。它将是准确的。下面我要补充
01
作为截止日期yyyymm
然后把它变成yyyymmdd
,使其成为iso8601 dateformat(与dateformats无关),然后计算季度值。