三个因素之间的平均值计算
问题描述:
我需要计算过去5个月的平均值(APR,MAY,JUN,JUL,AUG)。我有两个分裂考虑:区域(总共6个地区)和状态(建设和流通之间)。目前数据是以每周格式显示的,所以我花了数周时间来获取每月数据。我如何获得平均每月使用两个分裂的数字。表看起来像这样:三个因素之间的平均值计算
Region|Orders|BuildStatus|Months
GP |1 |Build |APR
GP |2 |Non-Build |APR
GP |1 |Build |MAY
GP |2 |Non-Build |MAY
PD |1 |Build |APR
PD |2 |Non-Build |APR
PD |1 |Build |MAY
PD |2 |Non-Build |MAY
它重复与其他5个地区,直到8月。
请协助您进行正确的计算,如果可能的话,您也可以为其查询。 结果应该是:
Region|Avg_Orders|BuildStatus
GP |1 |Build
GP |2 |Non-Build
PD |1 |Build
PD |2 |Non-Build
平均的数字应该是5个月的平均水平。
感谢
答
DECLARE @t TABLE(
Region NVARCHAR(2)
,Orders INT
,BuildStatus NVARCHAR(100)
,Months NVARCHAR(3)
)
INSERT INTO @t VALUES
('GP', 1,'Build', 'APR')
,('GP', 2,'Non-Build', 'APR')
,('GP', 1,'Build', 'MAY')
,('GP', 2,'Non-Build', 'MAY')
,('PD', 1,'Build', 'APR')
,('PD', 2,'Non-Build', 'APR')
,('PD', 1,'Build', 'MAY')
,('PD', 2,'Non-Build', 'MAY');
WITH cteAgg AS(
SELECT t.Region, t.BuildStatus, SUM(t.Orders) Orders, COUNT(DISTINCT t.Months) MonthsCount
FROM @t t
GROUP BY t.Region, t.BuildStatus
)
SELECT Region, Orders/MonthsCount AS Avg_Orders, BuildStatus
FROM cteAgg
ORDER BY 1
'表看起来像this' ...你失去了我与'Months'列。 _Never_将日期存储为文本,在这种情况下,它甚至不是远程接近ISO日期的东西。它可能需要很多SQL日期杂技来回答你的问题。 –
请关注桌面上的内容。数据已经被烹饪,这只是摘要 –
确定...但您至少应该显示来自原始表格和预期输出的样本数据。这告诉我们比什么都重要。 –