Сумма, группировка по и Null

#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;