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