I have a table as shown below. I want to do a partition and then subtract the values in the same column and different rows to get the difference using group by.
| id | type | name | amount |
|---|---|---|---|
| 1 | sale | sam | 2 |
| 2 | sale | sam | 15 |
| 3 | return | lilly | 20 |
| 4 | sale | lilly | 25 |
| 5 | return | sam | 3 |
| 6 | sale | anju | 20 |
And Need to return:
| name | amount |
|---|---|
| sam | 14 |
| lilly | 5 |
| anju | 20 |
CodePudding user response:
Your sample data is a little suspect but I think you basically need to apply a case expression to your sale type:
select name,
Sum(amount * case when type='return' then -1 else 1 end) Amount
from t
group by name;
