Вы могли бы сделать это в CASE
завернутые в SUM
Test Data
CREATE TABLE #TestData (a int, b int)
INSERT INTO #TestData (a,b)
VALUES
(-1,1)
,(5,3)
,(-4,-4)
,(6,7)
,(9,-2)
Запрос
SELECT
SUM((CASE WHEN A > 0 THEN A ELSE 0 END) + (CASE WHEN B > 0 THEN B ELSE 0 END)) Positive
,SUM((CASE WHEN A < 0 THEN A ELSE 0 END) + (CASE WHEN B < 0 THEN B ELSE 0 END)) Negative
FROM #TestData
Выход
Positive Negative
31 -11
I ж вам это нужно в два ряда, попробуйте этот
SELECT
'Positive' DataType
,SUM((CASE WHEN A > 0 THEN A ELSE 0 END)) A
,SUM((CASE WHEN B > 0 THEN B ELSE 0 END)) B
FROM #TestData
UNION ALL
SELECT
'Negative' DataType
,SUM((CASE WHEN A < 0 THEN A ELSE 0 END)) A
,SUM((CASE WHEN B < 0 THEN B ELSE 0 END)) B
FROM #TestData
Результат
DataType A B
Positive 20 11
Negative -5 -6
Или это
SELECT
'Positive' DataType
,SUM((CASE WHEN A > 0 THEN A ELSE 0 END) + (CASE WHEN B > 0 THEN B ELSE 0 END)) Result
FROM #TestData
UNION ALL
SELECT
'Negative'
,SUM((CASE WHEN A < 0 THEN A ELSE 0 END) + (CASE WHEN B < 0 THEN B ELSE 0 END))
FROM #TestData
Результат
DataType Result
Positive 31
Negative -11
Ok, без UNION вы можете использовать UNPIVOT как это
SELECT
DataType
,result
FROM
(
SELECT
SUM((CASE WHEN A > 0 THEN A ELSE 0 END) + (CASE WHEN B > 0 THEN B ELSE 0 END)) Positive
,SUM((CASE WHEN A < 0 THEN A ELSE 0 END) + (CASE WHEN B < 0 THEN B ELSE 0 END)) Negative
FROM #TestData
) pr
UNPIVOT
(
result
for DataType in (Positive, Negative)
)u
Результат
DataType result
Positive 31
Negative -11
Вы должны взглянуть на ке yword 'HAVING'. – tobi6
Каковы значения, которые вы ожидаете увидеть в своем выходе, на основе ваших входных данных? Вы суммируете все отрицательные значения независимо от того, находятся ли они в столбце a или b, или суммируете ли вы для каждого столбца отдельно? – Boneist
Пожалуйста, объясните свое «особое состояние». – onedaywhen