我需要爲下面的場景的解決方案得到一個列到不同的列輸出爲正數和負數:需要從單一的表
TABLE A:
col1
1
-1
6
-5
2
4
-2
5
我想要的輸出:
POSITIVE NEGATIVE
1 -1
2 -2
4 NULL
5 -5
6 NULL
我需要爲下面的場景的解決方案得到一個列到不同的列輸出爲正數和負數:需要從單一的表
TABLE A:
col1
1
-1
6
-5
2
4
-2
5
我想要的輸出:
POSITIVE NEGATIVE
1 -1
2 -2
4 NULL
5 -5
6 NULL
您可以嘗試類似:
SELECT t1.col1 AS POSITIVE, t2.col1 AS NEGATIVE
FROM (
SELECT col1
from tableA
WHERE col1 > 0) t1
FULL OUTER JOIN (
SELECT col1
FROM tableA
WHERE col1 < 0) t2 ON t1.col1 = ABS(t2.col1)
ORDER BY ABS(COALESCE(t1.col1, t2.col1))
0通常被認爲是正面的,但否則我同意:) – MatBailie
謝謝@Giorgos Betsos – user3326140
此相關子查詢你想要做使用ABS
什麼:
SELECT POSITIVE = a1.col1,
NEGATIVE = (SELECT TOP 1 a2.col1
FROM TableA a2
WHERE a2.col1 < 0
AND ABS(a2.col1) = a1.col1)
FROM TableA a1
WHERE a1.col1 >= 0
ORDER BY a1.Col1
我覺得更容易閱讀爲FULL OUTER
自JOIN
。
select A.Col1 as POSITIVE,
B.Col1 as NEGATIVE
FROM A
FULL JOIN A as B on (-A.col1=B.Col1)
WHERE A.Col1>0 or B.Col1 < 0
ORDER BY ISNULL(A.Col1,-B.Col1)
如果正值始終在表中的每個負存在,那麼使用LEFT JOIN,而不是FULL:
select A.Col1 as POSITIVE,
B.Col1 as NEGATIVE
FROM A
LEFT JOIN A as B on (-A.col1=B.Col1)
WHERE A.Col1>0
ORDER BY A.Col1
你的結果似乎假定行的排序。 SQL Server中的表(以及所有數據庫)表示*無序*集。您需要一個單獨的列來指定排序。 –
對於相同的'-ve'值,總是最多隻有一個'+ ve'值,反之亦然?如果不是,那應該如何處理? –
什麼決定NULL的外觀? –