将单个列拆分为两个不同的SQL Server列

时间:2018-03-08 21:17:56

标签: sql sql-server

我有这样的事情:

C1  C2  
1   -1  
2   -2  
3   -3  
4   -4  

我想要一个像这样的输出:

 values  
   1  
  -5  
  10  
  -9  
  15  
  -3  
   8  
 -11  
  12  
 -17  

任何人都可以帮我编写查询以在T-SQL中获取此输出吗?

如果有这样的话会怎么样:

function updater() {
  this.updater = setTimeout(async function() {
    let data = await updatingFromInternet(url);     
    updater();
  }, 5000);
}

我必须制作两列,将一列中的正值与另一列中的负值分开。

5 个答案:

答案 0 :(得分:1)

您可以使用聚合:

select max(col1), min(col1)
from t
group by abs(col1);

答案 1 :(得分:0)

这将做你想要的......一个简单的自我加入

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

答案 2 :(得分:0)

您必须自己JOIN表格然后限制结果,以便从第一列中排除负数

SELECT t1.Col1 c1, t2.Col1 c2 FROM tbl t1
JOIN tbl t2 ON t1.Col1 = t2.Col1*-1 AND t1.Col1 > 0

回答第二个问题:

想法是分别选择正数和负数,然后对其行号进行FULL OUTER JOIN

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;

示例:

CREATE TABLE tbl ( Col1 int );
INSERT INTO tbl VALUES (6), (7), (-4), (1), (-2), (3), (5);

-- RESULT
| c1 |     c2 |
|----|--------|
|  1 |     -2 |
|  3 |     -4 |
|  5 | (null) |
|  6 | (null) |
|  7 | (null) |

答案 3 :(得分:0)

SELECT t1.col1 as C1,
       t2.col1 AS C2
FROM   tbl t1
JOIN   tbl t2
ON     t1.col1 = (t2.col1 * -1)
WHERE  t1.col1 > 0
GO
C1 | C2
-: | -:
 1 | -1
 2 | -2
 3 | -3
 4 | -4

dbfiddle here

答案 4 :(得分:0)

您可以使用分析函数ROW_NUMBER()加入两个查询的值:

df_monthly.index.set_names(('Year','Month', 'Week', 'Dayofweek'))