0

在 SSMS 中,我有一个如下所示的Orders事实表:

订单

ID   GroupKey    OrderID    Amount    DaysKey
----------------------------------------------
1    29          29422      23.93      14
2    29          29444     -13.28     101
3    29          29453      14.28     101
4    30          30194     100.00     103
5    32          30201     101.53      93
6    32          30291      50.00     121

我有一个Groups看起来像这样的维度

团体

Key    Name           StyleKey       AvgXX
-------------------------------------------
29     Blue           2              NULL
30     xyz            1              NULL
31     doesntmatter   2              NULL
32     Red            1              NULL

我有一个Days看起来像这样的维度:

    Key    Day
    ------------ 
    1      0
    2      1 
    3      4
    ...    ...
    1000   999

我有一个Style看起来像这样的维度:

风格

Key     Style
---------------
1       3.5
2       2

我想要做的是用大于或等于 100的每个平均值填充表格[AvgXX]上的列。GroupsAmountStyleDay

例如,该Red组属于StyleKey 1Orders表中有 2 个条目StyleKey 1超过 100 天(见记录 4 和 6)。因此,AvgXX该组的列Red应为 75.00。

Blue组(第 29 组)的平均值应为 1,因为 1)Orders 表中只有 1 个 StyleKey 为 1 的组(参见第 2 行和第 3 行),DayKey 101 的总金额为 1(第一行有小于 100 的一天,因此应忽略)。

此外,我想要每个样式的平均值(目前只有 2 个样式)

通常,我会在可视化工具中进行这样的计算,但在这种情况下,很遗憾,我不能。

4

2 回答 2

0
select StyleKey, avg(Amount) 'awb' 
from groups 
join orders
  on orders.ID = groups.key 
 and DaysKey >= 101 

您将需要弄清楚如何按天计算
这不是编码服务

于 2018-01-30T00:20:17.253 回答
0

也许这

Select GroupKey
     , Average(Amount) OVER (Partition By GroupKey)
FROM Orders
WHERE Day >= 100
GROUP BY GroupKey

如果您想查看每个组键的平均值。

于 2018-01-29T23:00:58.813 回答