-------------
| a | b |
-------------
| -1 | 1 |
| 5 | 3 |
| -4 | -4 |
| 6 | 7 |
| 9 | -2 |
-------------
回答
negative :
positive :
編輯:
這是一個特殊的條件下不使用union
。
-------------
| a | b |
-------------
| -1 | 1 |
| 5 | 3 |
| -4 | -4 |
| 6 | 7 |
| 9 | -2 |
-------------
回答
negative :
positive :
編輯:
這是一個特殊的條件下不使用union
。
你可以在CASE
包裹在SUM
測試數據
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
我這樣做F你需要它在兩行,試試這個
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
好,沒有UNION您可以使用逆透視像這樣
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
謝謝。但我需要2行: –
@RomanVoitseshevskyi我剛剛更新了我的答案,看看是否可以爲您解決它 –
@RomanVoitseshevskyi我提供了一個答案,使用unpivot而不是聯合。搏一搏。 –
with cte as
(
select a as ab from tablename
union all
select b from tablename
)
select 'positive', sum(ab) from cte where ab > 0
union all
select 'negative', sum(ab) from cte where ab < 0
無工會請 –
@RomanVoitseshevskyi,爲什麼你不能使用工會? – jarlh
爲什麼沒有工會?如果你提出一個完整的問題,並提出你有任何限制,它會阻止人們提供一個答案,只爲目標職位將被改變這樣的事情。 –
可以使用SIGN功能分組:
SELECT CASE WHEN SUM(x) >= 0 THEN 'positive:' ELSE 'negative' END as sign, SUM (x) as result
FROM (SELECT *
FROM TABLE_NAME UNPIVOT (x FOR y IN (a AS 'a', b AS 'b')))
WHERE x <> 0
GROUP BY SIGN (x)
而且沒有PIVOT;)
SELECT CASE rn WHEN 1 THEN 'positive:' ELSE 'negative' END SIGN,
SUM (CASE SIGN (a)WHEN rn THEN a ELSE 0 END +
CASE SIGN (b) WHEN rn THEN b ELSE 0 END) result
FROM TABLE_NAME x
JOIN ( SELECT ROWNUM - 2 rn
FROM DUAL
CONNECT BY LEVEL < 4) y
ON rn <> 0
GROUP BY rn
你應該看看ke yword'HAVING'。 – tobi6
根據您的輸入數據,您希望在輸出中看到什麼值?你是否總結了所有的負值,無論他們是在列a還是在b,還是你分別爲每列求和? – Boneist
請解釋你的「特殊情況」。 – onedaywhen