2013-02-12 79 views
3

我想制作一列从一列到两列。例如,我有一个路径表。我有4行,我希望将它分成两列,如PATH2表。我该怎么做?我想这样做是为了计算每个路径的价值如何制作一个列表两列?

╔══════╗ 
║ PATH ║ 
╠══════╣ 
║ 1 ║ 
║ 2 ║ 
║ 3 ║ 
║ 4 ║ 
╚══════╝ 

╔══════╦═══════╗ 
║ PATH ║ PATH2 ║ 
╠══════╬═══════╣ 
║ 1 ║  2 ║ 
║ 2 ║  3 ║ 
║ 3 ║  4 ║ 
╚══════╩═══════╝ 
+1

你一定要在某种基础上分割它。那是什么?你希望分裂的条件是什么 – asifsid88 2013-02-12 07:57:21

+0

条件是前两行(1,2)将在新表中的同一行中。第一个表中的第二行和第三行将在第二行在第二个表格中。它继续像这样..我希望找到路径,并稍后分配到这些路径.. – 2013-02-12 19:51:22

回答

4

SQL Fiddle

MS SQL Server 2008的架构设置

create table YourTable 
(
    PATH int 
) 

insert into YourTable values (1),(2),(3),(4) 

查询1

select T1.PATH, 
     Lead.PATH as PATH2 
from YourTable as T1 
    cross apply (
       select top(1) PATH 
       from YourTable as T2 
       where T2.PATH > T1.PATH 
       order by T2.PATH 
      ) as Lead 

Results

| PATH | PATH2 | 
---------------- 
| 1 |  2 | 
| 2 |  3 | 
| 3 |  4 | 
3

如果你是在SQL Server 2012工作,你可以使用LEAD解析函数。

WITH records 
AS 
(
    SELECT PATH, 
      LEAD(Path) OVER (ORDER BY PATH) Path2 
    FROM TableName 
) 
SELECT Path, Path2 
FROM records 
WHERE Path2 IS NOT NULL 

或者如果SQL SERVER 2005+

WITH records 
AS 
(
    SELECT PATH, 
      ROW_NUMBER() OVER (ORDER BY PATH) rn 
    FROM TableName 
) 
SELECT a.Path, b.Path AS Path2 
FROM records a 
     INNER JOIN records b 
      ON a.rn+1 = b.rn 
+0

非常感谢您的答案。 – 2013-02-12 19:51:50

相关问题