2013-07-09 62 views
0

蔭試圖環路我的價值觀,使我的結果必須像SQL循環爲下一列重複值?

 ETA    ETD 
    01/01/2013  03/01/2013 //Adding Days according to condition, Here 1 day 
    03/01/2013  06/01/2013 //Add 3 days 
    06/01/2013  18/01/2013 
    18/01/2013  21/01/2013 

在這裏,我需要循環值,這樣我的價值被重複下一行

爲此,我已經完成了我的工作,爲

CREATE TABLE #TEMPETAETD(ROWNUM INT,ETA DATETIME,ETD DATETIME) 
    CREATE TABLE #TEMPETD(ID INT IDENTITY(1,1),ETD DATETIME,ROWNUM INT) 
    CREATE TABLE #TEMPETA(ID INT IDENTITY(1,1),ETA DATETIME,ROWNUM INT) 
    ;WITH cte AS(
    SELECT Row_Number() OVER(ORDER BY Sequence)AS RowID,@ETA AS ETA,DATEADD(DD,vd.NumHaltDays,@ETD) as ETD FROM VoyageDetails vd WHERE ID=1 and vd.Sequence BETWEEN 0 AND 1) 
    INSERT INTO #TEMPETAETD select * from cte 
    DECLARE @C INT,@C1 INT 
SET @C=1 

    WHILE @C<(SELECT COUNT(*) FROM #TEMPETAETD) 
    BEGIN 
INSERT INTO #TEMPETA SELECT * FROM #TEMPETAETD WHERE [email protected] 
SET @[email protected]+1 
END 

SET @C1=2 
    WHILE @C1<=(SELECT COUNT(*) FROM #TEMPETAETD) 
    BEGIN 
INSERT INTO #TEMPETD SELECT * FROM #TEMPETAETD WHERE [email protected] 
SET @[email protected]+1 
END 

這是我的循環狀態......,在這裏我不能讓我的下一行未來重複的值..,任何一個可以請幫助

回答

1

它看起來像你想要的值來自當前行和它之前的行。換句話說,你希望能夠將一行與前一行配對,然後從這對中選擇一些東西。

我不認爲你需要這個循環。循環一般很慢。

與您一樣,總體思路是對行進行編號。然後你可以用號碼加入表格本身。下面是如何在不使用循環的情況下進行配對的例子。架構:

create table T (a int); 
insert into T values 
(1), (7), (20), (30), (500), (800), (1300), (2112); 

查詢:

with tNumbered as (
    select row_number() over (order by a) as rowID, a 
    from T 
) 
select tLeft.a as l, tRight.a as r from tNumbered tLeft 
left join tNumbered tRight on tLeft.rowID = tRight.rowID -1 

這裏有一個小提琴顯示行動吧:http://sqlfiddle.com/#!3/a257a/2

+0

哇驚人..,謝謝老大... –

+0

在這裏你能幫助我通過採取2列第二列值重複第一次coulmn從第二個記錄,Actully我一直在嘗試你的邏輯,但它不工作 –

+0

@þÍńķ我不明白你想說什麼。你能用示例輸入更新你的問題嗎? –