我目前在一个查询上遇到了一个问题:我有两个表。
表1:
表2:
我尝试在datehour(有效)和每个活动、每个prf\U id、每个长度和每个类型上联接这两个表,以计算表2的hpp列每年的发生次数。
例如,对于给定的prf\ U id、长度、类型和活动,我将在表1中列出2019年4月1日到2020年4月1日之间的日期范围。在这种情况下,在我的查询中,我需要一个新的列,为2019年4月1日至2019年12月31日之间的所有日期提供这段时间内水电站发生率的总和。对于2020年,总额将在2020年1月1日至2020年4月1日之间。
我试过这样做:
SELECT Table1.DateHour,
SUM(Table2.HPP) OVER (PARTITION BY YEAR(Table2.DateHour)
FROM Table1
LEFT JOIN Table2 on Table2.DateHour=Table1.DateHour
但这给了我非常奇怪的结果 OVER PARTITION BY
似乎不起作用。
1条答案
按热度按时间yfjy0ee71#
你的问题混淆了术语。
计数与总和
... 计算发生次数。。。总数是。。。
计数事件与将它们相加是不同的。每个可以合并的记录都算作一次发生。计算总和意味着将一列的值相加。我将这两种计算都添加到下面的解决方案中(参见
IsHour_Sum
与Table2_Count
).组合分组
在同一个查询中进行不同的求和[问题标题]
... 对于每个战役,每个prf\U id,每个长度和每个类型。。。
您是要在这些列的每个组合上进行聚合,还是单独在每个列上进行聚合?我假设你是在追求我的解决方案中的组合。举例说明:
如果
列
A
有3个可能的值(A1, A2, A3
)以及列
B
有2个可能的值(B1, B2
)然后
有5个计数(
3 + 2
)聚合时(A
)以及(B
)独立地有6个计数(
3 * 2
)当聚合(A,B
)再一次:
样本数据
我漏掉了那个专栏
Value
从table1
因为这不是你问题的一部分。我还更改了table2
至2018-05-23
与大多数table1
记录。否则所有的计数和总数都会0
.解决方案
对日期年份进行聚合的最简单方法是将该部分拆分为一个新列,而不是使用
over(partition by ...)
建筑。如果不需要新列Year
在输出中,只需将其从字段列表中删除(在select
),但它必须保留在grouping子句中(在group by
).结果