T-SQL - 按样式分组

T-SQL - Group by Style

在 SSMS 中,我有一个订单事实 table,如下所示:

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

我想做的是用每个 Style 的平均值 Amount 填充 Groups table 上的 [AvgXX] 列,其中 Day 大于或等于 100。

例如,Red 组有一个 StyleKey = 1。因此,AvgXX 列应该显示 avg(Amount)StyleKey = 1 where Days >= 100

注意Days / DaysKey相同的Days应该被认为是同一天(换句话说,如果我在第100天有2个条目都是1,则两者的平均值应该是2 / 1 = 2不是 2 / 2 = 1).

我正在努力解决的更多是 UPDATE 语句,而不是带有一些连接的简单 select 语句。

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

(注:这个问题我昨天才问的,但是写的不好所以没说清楚,希望这样更清楚)

我不明白你想为这个查询做的分组和平均的解释,但听起来你知道如何做那部分。

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

     -- 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