Необходимо получить выходные данные в виде положительных и отрицательных чисел из одного столбца в разные столбцы из одной таблицы
Мне нужно решение для сценария ниже:
TABLE A:
col1
1
-1
6
-5
2
4
-2
5
Я хочу ВЫХОД как:
POSITIVE NEGATIVE
1 -1
2 -2
4 NULL
5 -5
6 NULL
3 ответа
Решение
Вы можете попробовать что-то вроде:
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))
Этот коррелированный подзапрос делает то, что вы хотите, используя 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