SQL Server将单个列拆分为两个不同的列
我有这样的想法:SQL Server将单个列拆分为两个不同的列,sql,sql-server,Sql,Sql Server,我有这样的想法: Column 1 2 3 4 -1 -2 -3 -4 C1 C2 1 -1 2 -2 3 -3 4 -4 values 1 -5 10 -9 15 -3 8 -11 12 -17 我想要这样的输出: Column 1 2 3 4 -1 -2
Column
1
2
3
4
-1
-2
-3
-4
C1 C2
1 -1
2 -2
3 -3
4 -4
values
1
-5
10
-9
15
-3
8
-11
12
-17
我想要这样的输出:
Column
1
2
3
4
-1
-2
-3
-4
C1 C2
1 -1
2 -2
3 -3
4 -4
values
1
-5
10
-9
15
-3
8
-11
12
-17
有谁能帮我写一个查询来获取T-SQL中的输出吗
如果事情是这样的:
Column
1
2
3
4
-1
-2
-3
-4
C1 C2
1 -1
2 -2
3 -3
4 -4
values
1
-5
10
-9
15
-3
8
-11
12
-17
我必须做两列,将一列中的正值和另一列中的负值分开 这将满足您的需要。。简单的自联接
create table test1
(
col1 int not null
)
insert into test1 (col1) values (1)
insert into test1 (col1) values (2)
insert into test1 (col1) values (3)
insert into test1 (col1) values (4)
insert into test1 (col1) values (-1)
insert into test1 (col1) values (-2)
insert into test1 (col1) values (-3)
insert into test1 (col1) values (-4)
select a.col1 C1, b.col1 C2 from test1 a
join test1 b on a.col1 = -b.col1
where a.col1 > 0
您必须将表与其自身连接起来,然后限制结果,以便从第一列中排除负数
SELECT t1.Col1 c1, t2.Col1 c2 FROM tbl t1
JOIN tbl t2 ON t1.Col1 = t2.Col1*-1 AND t1.Col1 > 0
对第二个问题的答复:
其思想是分别选择正数和负数,然后对它们的行号进行完全的外部联接
SELECT t1.Col1 c1, t2.Col1 c2 FROM (
SELECT t11.Col1,
ROW_NUMBER() OVER(ORDER BY t11.Col1 ASC) rn
FROM tbl t11
WHERE t11.Col1 > 0
) t1 FULL JOIN (
SELECT t22.Col1,
ROW_NUMBER() OVER(ORDER BY t22.Col1 DESC) rn
FROM tbl t22
WHERE t22.Col1 < 0
) t2 ON t2.rn = t1.rn;
dbfiddle您可以使用聚合:
select max(col1), min(col1)
from t
group by abs(col1);
您可以使用分析函数ROW_NUMBER将两个查询的值连接起来:
WITH A AS (
SELECT col1, ROW_NUMBER() OVER (ORDER BY col1 desc) AS row_num
FROM TABLE_1
WHERE col1 < 0),
B AS (
SELECT col1, ROW_NUMBER() OVER (ORDER BY col1) AS row_num
FROM TABLE_1
WHERE col1 >= 0)
SELECT A.col1 AS C1, B.col1 AS C2
FROM A
INNER JOIN B
ON A.row_num = B.row_num;
您可以在表上进行自连接,但是我认为您需要更具体地说明您想要什么。C1与C2的关系如何?正和负的计数值相等?每个正值都有相同的负值吗?如果你所做的只是将正值与相应的负值连接起来,那么就做一个完整的计算?左边内部的带ABS或0-…的自连接。。。。这并不难。你试过什么?你想要C2中的所有负值吗?如果这是SQL Server,为什么我会在那里看到plsql标记????正确标记!!谢谢这个逻辑对我起作用了。现在我在第二节要做的是..谢谢Alex Zen这个逻辑起作用了。。