2013-07-17 2 views
0

SQL을 사용하여 현재 행에서 이전 행의 값을 뺍니다.SQL 행은 이전 행의 값을 사용합니다.

PONum | OrderLine | PartNum | PartDescription | OrderNum | OurQty | Reserved | Allocated | NewOurQty | CustNum | Name 
73   1  10050926 Example Description 62  55   35   35   20   1032  Sam Test 
73   1  10050926 Example Description 63  55   6   6   49   496  Steve Test 

을하지만 그것을 반환 할 :

SELECT 
    rd.PONum, 
    od.OrderLine, 
    rd.PartNum, 
    p.PartDescription, 
    od.OrderNum, 
    rd.OurQty, 
    od.Number01 AS Reserved, 
    CASE WHEN rd.OurQty - od.Number01 > 0 
     THEN od.Number01 
     ELSE rd.OurQty END AS Allocated, 
    rd.OurQty - od.Number01 AS NewOurQty, 
    c.CustNum, 
    c.Name 
FROM dbo.RcvDtl AS rd INNER JOIN 
    dbo.Part AS p ON rd.PartNum = p.PartNum INNER JOIN 
    dbo.OrderDtl AS od ON rd.PartNum = od.PartNum INNER JOIN 
    dbo.OrderHed AS oh ON od.OrderNum = oh.OrderNum INNER JOIN 
    dbo.Customer AS c ON od.CustNum = c.CustNum 
WHERE (rd.PONum = 73) 
     AND (od.Number01 > 0) 
     AND (od.OpenLine = 1) 

는 값을 반환 행 1에서

PONum | OrderLine | PartNum | PartDescription | OrderNum | OurQty | Reserved | Allocated | NewOurQty | CustNum | Name 
73   1  10050926 Example Description 62  55   35   35   20   1032  Sam Test 
73   1  10050926 Example Description 63  55   6   6   14   496  Steve Test 

NewOurQty = 20 (55-35). 이제 행 2는 NewOurQty (행 n-1) - 예약 됨 (행 n에서)을 계산하여 현재 행에 대한 NewOURQty를 계산해야합니다.

SQL을 사용하여 이전 행의 값을 검색하려면 어떻게해야합니까?

편집하는 것은

것은 나는 마이크로 소프트 SQL이

+1

'lag()'와 같은 WINDOW 함수로도 충분합니다. – wildplasser

+0

어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

+0

MSSQL을 사용하고 있습니다 – samb90

답변

1

join ON firstAlias.row=secondAlias.row+1 어쩌면이 기술이 유용 할 것이다 추가

CREATE TABLE TEST(
    source INT 
) 

INSERT INTO TEST VALUES(1) 
INSERT INTO TEST VALUES(10) 
INSERT INTO TEST VALUES(20) 
INSERT INTO TEST VALUES(30) 
INSERT INTO TEST VALUES(40) 
INSERT INTO TEST VALUES(50) 


/*HERE THE QUERY*/ 
WITH temp AS (
     SELECT t.*,ROW_NUMBER() over (order by t.source) as row_num 
     FROM TEST t 
    ) 
    SELECT 
    x.source, 
    x.source + ISNULL((SELECT y.source FROM temp y WHERE y.row_num = x.row_num - 1),0) AS SUM_ACUMULATE  
FROM temp x 

는이 here을 시도 할 수 있습니다.

1

당신은 행 번호

SELECT @ROW := @ROW + 1 AS row, first_name 
FROM users, (SELECT @ROW := 0) r; 

에게 소개하고 하위 쿼리에 열을 추가 할 수 있습니다 사용하고 있습니다. 그런 다음 (ROW N-1의 값으로 ROW N의 값을 추가 여기)

+0

이것은 SQL Server 용입니까? –

관련 문제