1

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

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

我有一个天维度,如下所示:天

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

我有一个样式维度,如下所示:

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

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

例如,该Red组的 a StyleKey= 1。因此,AvgXX 列应该向我显示avg(Amount)forStyleKey = 1 where Days >= 100

请注意,应将具有相同 Days / DaysKey 的 Days 视为同一天(换句话说,如果我在第 100 天有 2 个条目均为 1,则两者的平均值不应2 / 1 = 22 / 2 = 1

我正在努力的更多的是UPDATE语句,而不是带有几个连接的简单 select 语句。

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

(注意:我昨天最初问了这个问题,但我写得不好所以不清楚。希望这更是如此)。

4

1 回答 1

1

我不明白您要为此查询执行的分组和平均的解释,但听起来您知道如何做那部分。

以下是一些示例代码,说明如何在计算出所需的值后更新组表。

     -- 1. Do your grouping query and calculate the average
     ;WITH cte AS (
        SELECT 
            GroupKey,
            AVG(Amount) as AvgAmount
        FROM 
            #Orders O 
        WHERE
            dayskey > 100
        GROUP BY 
            GroupKey
     )

     -- 2. Join the cte to the groups table and update
     UPDATE G
     SET 
         G.AvgXX = cte.AvgAmount
     FROM 
                cte
     INNER JOIN Groups G ON cte.GroupKey = G.GroupsKey
于 2018-01-30T21:25:38.850 回答