我需要为下面的场景的解决方案得到一个列到不同的列输出为正数和负数:需要从单一的表
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的外观? –