SQL - 减法方法

时间:2014-05-12 07:17:13

标签: sql sql-server-2008

我想在下表中使用查询执行减法。

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)只有

有没有任何方法可以达到这个效果。我不想用光标左右。

1 个答案:

答案 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