我有以下示例数据和所需的输出,我编写的 SQL 查询并没有完全产生我正在寻找的结果,我不明白为什么。我尝试过不同的分组,聚合或不聚合“单位”列,但似乎没有任何效果。任何帮助将不胜感激。
样本数据:
已赚问:
活动ID | 已获得MH_I | 期间_WE |
---|---|---|
CS0001 | 206.79 | 2023 年 5 月 27 日 |
CS0001 | 41.35 | 2023 年 6 月 10 日 |
计划问:
活动ID | 已获得MH_I | 期间_WE |
---|---|---|
CS0001 | 41.36 | 2023 年 5 月 20 日 |
CS0001 | 41.36 | 2023 年 5 月 27 日 |
CS0001 | 33.09 | 2023 年 6 月 3 日 |
CS0001 | 41.36 | 2023 年 6 月 10 日 |
期间Q:
周末 | 期间_WE |
---|---|
2023 年 5 月 20 日 | 2023 年 5 月 27 日 |
2023 年 5 月 27 日 | 2023 年 5 月 27 日 |
2023 年 6 月 3 日 | 2023 年 6 月 10 日 |
2023 年 6 月 10 日 | 2023 年 6 月 10 日 |
我尝试过的SQL:
WITH AggregatedEarnedHours AS (
SELECT
WBS,
ActivityID,
Period_WE,
SUM(EarnedMH_I) AS EarnedHours
FROM
EarnedQ
GROUP BY
WBS,
ActivityID,
Period_WE
),
AggregatedPlannedHours AS (
SELECT
AID,
EOW2 AS Period_WE,
SUM(Units) AS PlannedHours
FROM
PlannedQ T
JOIN PeriodQ P ON T.Weekending = P.Period_WE
GROUP BY
AID,
EOW2
)
SELECT
E.WBS,
E.ActivityID,
E.Period_WE,
SUM(E.EarnedHours) AS EarnedHours,
ISNULL(P.PlannedHours, 0) AS PlannedHours
FROM
AggregatedEarnedHours E
LEFT JOIN AggregatedPlannedHours P ON E.ActivityID = P.AID AND E.Period_WE = P.Period_WE
GROUP BY
E.WBS,
E.ActivityID,
E.Period_WE,
P.PlannedHours
HAVING (SUM(E.EarnedHours) != 0 OR SUM(P.PlannedHours) !=0) AND
SUM(E.EarnedHours) > 0
电流输出:
活动ID | 已获得MH_I | 单位 | 周末 |
---|---|---|---|
CS0001 | 206.79 | 579.04 | 2023 年 5 月 27 日 |
CS0001 | 41.35 | 521.15 | 2023 年 6 月 10 日 |
所需输出:
活动ID | 已获得MH_I | 单位 | 周末 |
---|---|---|---|
CS0001 | 206.79 | 82.72 | 2023 年 5 月 27 日 |
CS0001 | 41.35 | 74.45 | 2023 年 6 月 10 日 |
正如你所看到的,它几乎可以工作,但是计划的时间太长了。我有一种感觉,这与错误地进行聚合或分组有关。另外,为了发布,这些数据被缩写了,所有表中都有更多行,但您明白了。请注意,PlannedQ 是每周数据,而我在这里尝试每两周分组一次。按双周进行手动分组不适合我的解决方案,因为在其他情况下我也需要按月进行分组并且需要动态的内容,因此包含了 periodQ 表。