#sql-server
#sql-сервер
Вопрос:
Я с головой погружаюсь в SQL. У меня есть следующая таблица
------ ---- ------ ------ -------
| Type | ID | QTY | Rate | Name |
------ ---- ------ ------ -------
| B | 1 | 1000 | 21 | Jack |
| B | 2 | 2000 | 12 | Kevin |
| B | 1 | 3000 | 24 | Jack |
| B | 1 | 1000 | 23 | Jack |
| B | 3 | 200 | 13 | Mary |
| B | 2 | 3000 | 12 | Kevin |
| B | 4 | 4000 | 44 | Chris |
| B | 4 | 5000 | 43 | Chris |
| B | 3 | 1000 | 26 | Mary |
------ ---- ------ ------ -------
Я не знаю, как бы я использовал Sum и Group by для достижения следующего результата.
------ ---- ------ ------ ------- ------------
| Type | ID | QTY | Rate | Name | Sum of QTY |
------ ---- ------ ------ ------- ------------
| B | 1 | 1000 | 21 | Jack | 5000 |
| B | 1 | 3000 | 24 | Jack | Null |
| B | 1 | 1000 | 23 | Jack | Null |
| B | 2 | 3000 | 12 | Kevin | 5000 |
| B | 2 | 3000 | 12 | Kevin | Null |
| B | 3 | 200 | 13 | Mary | 1200 |
| B | 3 | 1000 | 26 | Mary | Null |
| B | 4 | 4000 | 44 | Chris | 9000 |
| B | 4 | 5000 | 43 | Chris | Null |
------ ---- ------ ------ ------- ------------
Любая помощь приветствуется!
Комментарии:
1. Ваш желаемый результат имеет неверный sumqty, вместо
ID = 2
него должно быть5000
.
Ответ №1:
Вы можете использовать функцию window :
select t.*,
(case when row_number() over (partition by type, id order by name) = 1
then sum(qty) over (partition by type, id order by name)
end) as Sum_of_QTY
from table t;