将数据分配到两列

Ank*_*ail 5 sql-server optimization

我试图找出将列的替代行拆分为两列的最佳优化方法.让我通过一个例子解释一下

我有以下数据

资源

我想要的结果集

结果集

在上面的例子中,替代行被转移到一个新列.我已经提出了一个解决方案,但如果我有数百万条记录则没有优化.

我的解决方案(未优化)

;WITH RecCtea
AS
(
SELECT *, ROW_NUMBER()  OVER (ORDER BY (select 1)) rowid FROM tabA ta  
)
SELECT a.cola,b.cola FROM (
(SELECT * FROM RecCtea rc WHERE rc.rowid%2 = 0) a JOIN 
 (SELECT * from RecCtea rc2 where rc2.rowid%2 != 0) b
 on a.rowid = b.rowid+1
 )
Run Code Online (Sandbox Code Playgroud)

SQLfiddle没有工作,所以这里是架构

CREATE TABLE tabA (
cola int 
);


INSERT tabA
(
    cola
)
VALUES
(100),(-100),(200),(-250),(300),(-350),(-400),(NULL)
Run Code Online (Sandbox Code Playgroud)

Gio*_*sos 4

尝试这个:

SELECT [0] AS col1, [1] AS col2
FROM 
(
  SELECT cola, 
         (ROW_NUMBER() OVER (ORDER BY (select 1)) + 1) / 2 AS rn,
         ROW_NUMBER() OVER (ORDER BY (select 1)) % 2 rowid 
  FROM tabA 
) AS src
PIVOT (
   MAX(cola) FOR rowid IN ([0],[1])) AS pvt
Run Code Online (Sandbox Code Playgroud)

输出:

col1    col2
------+------
-100  | 100
-250  | 200
-350  | 300
NULL  | -400
Run Code Online (Sandbox Code Playgroud)