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没有工作,所以这里是架构
Run Code Online (Sandbox Code Playgroud)CREATE TABLE tabA ( cola int ); INSERT tabA ( cola ) VALUES (100),(-100),(200),(-250),(300),(-350),(-400),(NULL)
尝试这个:
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)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |