2013-02-12 5 views
3

Я хочу сделать таблицу из одной колонки в две колонки. Например, у меня есть таблица путей. У меня есть 4 строки, я хочу разбить их на два столбца, как в таблице PATH2. Как я могу это сделать? Я хотел бы сделать это для того, чтобы вычислить каждый пути дорожитКак сделать одну таблицу столбцов двумя столбцами?

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

в

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

Вы определенно хотите разбить его на определенной основе. Что это? Каково ваше условие, по которому вы хотите разделить – asifsid88

+0

Условие - первые две строки (1,2) будут в одной строке в новой таблице. А вторая и третья строки в первой таблице будут во второй строке во второй таблице. Это происходит так. Я хочу найти пути и назначить расстояние позже на эти пути. –

ответ

4

SQL Fiddle

сервера Настройка MS SQL 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

Большое спасибо за ваш ответ. –

Смежные вопросы