#sql #sql-server #tsql #stored-procedures
#sql #sql-сервер #tsql #хранимые процедуры
Вопрос:
Как получить результирующую таблицу путем вычисления многорядности?
Name Type Value
------------------------------
Name1 Plus 5000
Name1 Minus 1000
Name2 Plus 3000
Name2 Minus 2000
Желаемый результат:
Name Value(Plus-Minus)
------------------------------
Name1 4000
Name2 1000
Комментарии:
1. опубликуйте свои попытки.
Ответ №1:
Используйте условную агрегацию и возьмите разницу всех значений «плюс» за вычетом всех значений «минус» для каждой группы имен записей.
SELECT
Name,
SUM(CASE WHEN Type = 'Plus' THEN [Value] ELSE 0 END) -
SUM(CASE WHEN Type = 'Minus' THEN [Value] ELSE 0 END) AS diff
FROM yourTable
GROUP BY
Name;
Ответ №2:
Вы можете использовать условную агрегацию:
SELECT Name,
SUM(CASE WHEN Type = 'Plus' THEN Value
WHEN Type = 'Minus' THEN - Value
ELSE 0
END) as total
FROM t
GROUP BY Name;