Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server将单个列拆分为两个不同的列_Sql_Sql Server - Fatal编程技术网

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这个逻辑起作用了。。