我正在嘗試根據 SQL 中磁區依據的另一列中的條件對一列求和,但它不起作用。所以我希望有人可以幫助我解決這個問題。
我的桌子是這樣的:
| Group_1 | Group_2 | 日期 | 價值 |
|---|---|---|---|
| 一個 | D | 2021 年 1 月 1 日 | 1 |
| 一個 | D | 2021 年 1 月 2 日 | 3 |
| 一個 | 乙 | 01/03/2021 | 5 |
| 乙 | D | 2021 年 1 月 1 日 | 7 |
| 乙 | D | 2021 年 1 月 2 日 | 9 |
| 乙 | 乙 | 01/03/2021 | 11 |
| 乙 | D | 2021 年 1 月 5 日 | 17 |
| 乙 | D | 01/03/2021 | 13 |
| 乙 | 乙 | 2021 年 1 月 4 日 | 13 |
| C | D | 2021 年 1 月 1 日 | 7 |
| C | D | 2021 年 1 月 2 日 | 10 |
因此,我需要對 [Group_2] 上的所有行的 [Value] 值求和,其中 [Group_2] 上的每個 [Group_1 ]。
結果應該是這樣的:
| Group_1 | Group_2 | 和 |
|---|---|---|
| 一個 | D | 4 |
| 乙 | D | 16 |
| C | D | 17 |
有誰知道我該如何解決這種問題?
uj5u.com熱心網友回復:
嘗試以下聚合NOT EXISTS:
SELECT Group_1, Group_2, SUM(Value) AS Value_Sum
FROM table_name T
WHERE Group_2 <> 'E' AND
NOT EXISTS (SELECT 1 FROM table_name D
WHERE D.Group_1 = T.Group_1 AND
D.Group_2 = 'E' AND
D.Date <= T.Date)
GROUP BY Group_1, Group_2
ORDER BY Group_1, Group_2
查看演示。
uj5u.com熱心網友回復:
select group_1
,group_2
,sum(value)
from
(
select group_1
,group_2
,case when count(case when group_2 = 'E' then 1 end) over(partition by group_1 order by date) = 0 then value end as value
from t
) t
group by group_1, group_2
having group_2 = 'D'
| group_1 | group_2 | 和 |
|---|---|---|
| 一個 | D | 4 |
| 乙 | D | 16 |
| C | D | 17 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519443.html
