Довольно простой SQL Server Query. Все, что вам нужно сделать, это условно суммировать по критериям.
SELECT ID, [YEAR]
, SUM(CASE WHEN SOURCE IN ('AV', 'AX', 'NL') THEN [VALUE] ELSE NULL END) [AV+AX+NL]
, SUM(CASE WHEN SOURCE = 'OV' THEN [VALUE] ELSE NULL END) [OV]
FROM src
GROUP BY ID, [YEAR]
ORDER BY ID, [YEAR]
Результаты:
| ID | YEAR | AV+AX+NL | OV |
+----+------+----------+------+
| 1 | 2014 | 15 | 25 |
| 1 | 2015 | 87 | NULL |
| 2 | 2014 | 44 | NULL |
| 2 | 2015 | 2 | NULL |
| 3 | 2011 | NULL | 104 |
Первоначально я использовал 0 в качестве альтернативного значения, когда условие в случае не соответствует. Однако, если вы хотите, чтобы NULL отображался вместо 0, когда нет совпадений, вам нужно изменить альтернативное значение на NULL. Если в агрегатную функцию передаются только значения NULL, возвращается NULL.
Единственное предостережение в том, что использование NULL вместо 0 в SUM приведет к предупреждению: нулевое значение удаляется с помощью агрегата или другой операции SET. В остальном все нормально.
EDIT
Это пустое предупреждение беспокоило меня. Альтернативой, которая даст те же результаты, будет преобразование столбца SOURCE, чтобы значения «av», «ax», «nl» были преобразованы в «av + ax + nl», а затем с помощью pivot получить суммы с помощью исходные значения 'av + ax + nl'.
SELECT pvt.ID, pvt.[YEAR], pvt.[AV+AX+NL], pvt.OV
FROM (
SELECT ID, [YEAR], [VALUE]
, CASE WHEN SOURCE IN ('AV', 'AX', 'NL') THEN 'AV+AX+NL' ELSE SOURCE END SOURCE2
FROM src
) src2
PIVOT (
SUM([VALUE])
FOR SOURCE2 IN ([AV+AX+NL], [OV])
) pvt
ORDER BY ID, [YEAR]