3

1列から2列のテーブルを作成したいと思います。たとえば、パステーブルがあります.4行ありますが、PATH2テーブルのように2列に分割したいのですが、どうすればよいですか?各パスの値を計算するためにこれを実行したい

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

の中へ

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

2 に答える 2

4

SQL フィドル

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

結果

| PATH | PATH2 |
----------------
|    1 |     2 |
|    2 |     3 |
|    3 |     4 |
于 2013-02-12T08:08:25.103 に答える
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
于 2013-02-12T08:02:19.130 に答える