我想在下表中使用查询执行减法。
WO X Y Z Date
12 10 10 12 10-05-2014 7:10
12 8 10 12 10-05-2014 8:10
12 8 12 12 10-05-2014 9:12
14 16 10 14 10-05-2014 10:10
14 10 10 12 10-05-2014 10:15
现在我想执行一个操作,以便预期的结果是
WO X Y Z Date
12 -2 0 0 10-05-2014 8:10
12 0 2 0 10-05-2014 9:12
14 -6 0 -2 10-05-2014 10:15
对于每个WO,它已经执行了操作,如(b-a),然后是(c-b)等。因此,从上面的例子中,它采用了第一行的WO 12,并且用第二行执行第x,y和z列的减法。等第三排。 WO 14也发生了同样的事情,但因为只有两行,所以(b-a)只有
有没有任何方法可以达到这个效果。我不想用光标左右。
答案 0 :(得分:2)
将表名视为TEST
WITH TABLE1 (ID, WO, X, Y, Z, date) AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY TEST.WO ORDER BY TEST.WO) AS ID,
TEST.*
FROM TEST
),
TABLE2 (ID, WO, X, Y, Z, date) AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY TEST.WO ORDER BY TEST.WO) AS ID,
TEST.*
FROM TEST
)
SELECT TABLE1.WO,
(TABLE1.X-TABLE2.X),
(TABLE1.Y-TABLE2.Y),
(TABLE1.Z-TABLE2.Z),
TABLE1.date
FROM TABLE1
LEFT JOIN TABLE2 ON TABLE1.ID = (TABLE2.ID + 1)
AND TABLE1.WO = TABLE2.WO
WHERE TABLE2.ID IS NOT NULL