【问题标题】:T-SQL - Group by StyleT-SQL - 按样式分组
【发布时间】:2018-01-30 15:47:53
【问题描述】:

在 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

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

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

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

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

我要做的是用每个Style 的平均值Amount 填充Groups 表上的[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 语句。

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

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

【问题讨论】:

  • 尝试执行一个选择语句,以获得您想要的值。一旦你这样做了,更新就很容易了。另外,请edit您的帖子包含您当前的尝试和示例数据作为 DDL+DML(创建表并插入语句)和期望的结果。

标签: tsql ssms-2016


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多