【发布时间】:2021-07-02 01:58:30
【问题描述】:
我的数据如下:
+----+--------+------------------+
| Id | Weight | is_weight_faulty |
+----+--------+------------------+
| A | 100 | 1 |
| A | 50 | 0 |
| A | 10 | 0 |
| B | 500 | 0 |
| B | 200 | 0 |
| B | 40 | 0 |
| C | 100 | 0 |
+----+--------+------------------+
我需要创建一个列正确权重,这取决于两个因素Id 和值is_weight_faulty。首先,我将通过Id 应用分区并通过is_weight_faulty 订购。如果对于任何子集,我们在is_weight_faulty 列中找到值1,我们的正确权重将是Weight = Correct_Weight,其中is_weight_faulty = 1 并且对于该子集的剩余条目Correct_Weight 将是0。
如果我们查看Id 的前三行,Correct_Weight 在第一行将等于 100,而对于接下来的两行,它将为 0。对于其余情况,Correct_Weight 将等于 Weight,因为没有记录is_weight_faulty = 1 在应用分区后我们将获得的每个数据子集。
期望的输出
+----+--------+------------------+----------------+
| Id | Weight | is_weight_faulty | Correct_Weight |
+----+--------+------------------+----------------+
| A | 100 | 1 | 100 |
| A | 50 | 0 | 0 |
| A | 10 | 0 | 0 |
| B | 500 | 0 | 500 |
| B | 200 | 0 | 200 |
| B | 40 | 0 | 40 |
| C | 100 | 0 | 100 |
+----+--------+------------------+----------------+
如果有 is_weight_faulty = 1 的条目,我无法创建将 Correct_Weight 设为 0 的案例
【问题讨论】:
-
你试过什么?你在哪里卡住了?
标签: sql sql-server window-functions derived-column