2012-11-15 23 views
1

我想獲取下一行的「對齊」值並將其存儲到名爲nextAlign的字段中的當前行中。我一直在使用分組,也爲這個表中的唯一標識符是不是一致的,並不總是有1.這裏的增量嘗試了一些數據:SQL獲取下一行值到當前行

type  field      starttop startleft length decimals alignment 
------------------------------------------------------------------------------------------- 
Text  CUSTOMER DETAILS CONFIRMATION  13.00  38.00  30.00  0.00  Centre 
Text  Please spare a few minutes to  15.00  2.00  30.00  0.00  Left   
Text  confirm your details as held  15.00  2.00  30.00  0.00  Wrap  
Text  on our system. You may fax the  15.00  2.00  30.00  0.00  Wrap  
Text  form to the number above.   15.00  2.00  30.00  0.00  Wrap  
Text  Any information you may supply  17.00  2.00  30.00  0.00  Left   
Text  will not be made available to  17.00  2.00  30.00  0.00  Wrap  
Text  third parties according to the  17.00  2.00  30.00  0.00  Wrap  
Text  Privacy Act.      17.00  2.00  30.00  0.00  Wrap  
Text  Legal name:      20.50  2.00  30.00  0.00  Left 

我要的是一個名爲「nextAlign」列具有以下數據:

nextAlign 

-Left 
-Wrap 
-Wrap 
-Wrap 
-Left 
-Wrap 
+1

你如何定義「下一個」對齊?哪一列可以用於排序? starttop? –

+0

另外,DB品牌是什麼? – danihp

回答

2

你沒有指定你的DBMS,所以這是ANSI SQL:

select type, 
     field, 
     align, 
     lead(align) over (order by starttop) as next_align, 
     starttop, 
     startleft 
from the_table 
+0

+1分析特性ANSI SQL 1999 – danihp

+0

我不認爲這個數據庫管理系統可用的主導函數。我認爲微軟只是剛剛發佈2012版本。 – dannmate

+0

@ user1805691:「SQL Server Management Studio 2008」是一個客戶端工具。它沒有提到你連接的SQL Server版本。但是,是的,它只是在SQL Server 2012中添加了對窗口功能的全面支持。 –

0

使用ROW_NUMBER()OVER(ORDER BY)

,外其加入到相同的選擇是這樣的:select_1_rownumber = select_2_rownumber + 1

+0

如果您擁有現代DBMS,則不需要row_number()。 –

+0

感謝您的輸入 – dannmate

0
with temptable as 
(select rownum 
     ,type 
     ,field 
     ,starttop 
     ,startleft 
     ,length 
     ,decimals 
     ,alignment 
    from YOURTABLE) 
select t.type 
     ,t.field 
     ,t.starttop 
     ,t.startleft 
     ,t.length 
     ,t.decimals 
     ,t.alignment 
     (select tt.alignment from temptable tt where tt.rownum = t.rownum+1) nextalign 
    from temptable t 

可能會爲你工作。

+0

感謝您的回答。你的邏輯是非常有用的,但我已經嘗試了你的答案,它仍然沒有指向下一個記錄。我甚至做了兩個有聯盟的桌子,但仍然不正確。 – dannmate