Попытка добавить значение и максимальное значение с помощью функции номера строки

#sql #sql-server #sql-server-2016 #window-functions

Вопрос:

Таблица А

 Row Number     ID    orderType    value     Reference Code
1              1      A            5          2
2              1      A.1          2          4
1              2      A            6          5
2              2      A.1          2          1
 

Я пытаюсь получить эту таблицу результатов B

 Row Number     ID    orderType    value     Reference Code
1              1      A            7          4
1              2      A            8          5
 

Я использую SQL Server 2016 и пытаюсь достичь результата в виде ТАБЛИЦЫ B, в которой я могу добавлять значение, а также получать максимальный ссылочный код.

Я использую Row_Number и сумму вместе, но не смог получить желаемый результат.

Мой вопрос таков

 SELECT 
  ID,
  Ordertype ,
  ROW_NUMBER() over (Partition by Id order by OrderType ) as Row Number,
  sum([Value]) over( partition by id) as Value,
  Max(Reference Code) as Reference Code

From Table A

where row number = 1
 

Комментарии:

1. Я предлагаю изменить ваш ссылочный код на что-то, что правильно сортируется как текст.

Ответ №1:

Используйте функции окна: SUM() для итога value , MIN() для orderType и MAX() для Reference_Code :

 SELECT DISTINCT ID,
       MIN(orderType) OVER (PARTITION BY ID) orderType,
       SUM(value) OVER (PARTITION BY ID) value,
       MAX(Reference_Code) OVER (PARTITION BY ID) Reference_Code
FROM TableA
 

Смотрите демонстрацию.

Ответ №2:

Почему бы просто не использовать агрегацию?

 select min(row_number), id, min(ordertype), 
       sum(value), max(referencecode)
from a
group by id;
 

Ответ №3:

Я пытался написать запрос для вас

 SELECT 
  id,
  (SELECT TOP 1 ot FROM test WHERE id=t.id ORDER BY ot) ot,
  ROW_NUMBER() OVER (PARTITION BY id ORDER BY id ) as row_num,
  SUM(val) as Value,
  MAX(ref_code) as ReferenceCode
FROM test as t
GROUP BY id;
 

Смотрите рабочую демонстрационную версию SQLFiddle