34,590
社区成员
发帖
与我相关
我的任务
分享
update a
set a.T3=(select sum(b.t1)-a.t2
from #k b
where b.code=a.code and b.sort<=a.sort and b.sort>a.sort-10)
from #k a
SELECT SUM(A.T1-B.T2) AS TOTAL,A.CODE
FROM #K A
OUTER APPLY (SELECT T2 FROM #K WHERE A.CODE=CODE AND SORT<=A.SORT AND SORT>A.SORT-10) AS B
GROUP BY A.CODE
UPDATE #K
SET T3=A.TOTAL
FROM
(SELECT SUM(A.T1-B.T2) AS TOTAL,A.CODE
FROM #K A
OUTER APPLY (SELECT T2 FROM #K WHERE A.CODE=CODE AND SORT<=A.SORT AND SORT>A.SORT-10) AS B
GROUP BY A.CODE) AS A
JOIN #K B ON A.CODE=B.CODE
[/quote]
如果CODE+SORT相当于联合主键,就再试试下面的。
SELECT A.*,B.*
FROM #K A
JOIN
(SELECT A.code,A.sort,SUM(B.t1-A.T2) AS TOTAL FROM #K A
OUTER APPLY (SELECT T1 FROM #K WHERE A.CODE=CODE AND SORT<=A.SORT AND SORT>A.SORT-10) AS B
GROUP BY A.code,A.sort) AS B ON A.code=B.code AND A.sort=B.sort
UPDATE #k
SET t3=B.TOTAL
FROM #K A
JOIN
(SELECT A.code,A.sort,SUM(B.t1-A.T2) AS TOTAL FROM #K A
OUTER APPLY (SELECT T1 FROM #K WHERE A.CODE=CODE AND SORT<=A.SORT AND SORT>A.SORT-10) AS B
GROUP BY A.code,A.sort) AS B ON A.code=B.code AND A.sort=B.sort
update a
set a.T3=c.t3
from #k a
cross apply(select t3=sum(b.t1)-a.t2*(select count(1)
from #k b
where b.code=a.code and b.sort<=a.sort and b.sort>a.sort-10)
from #k b
where b.code=a.code and b.sort<=a.sort and b.sort>a.sort-10) c
select * from #k
/*
code sort t1 t2 t3
------ ----------- --------------------------------------- --------------------------------------- ---------------------------------------
a 1 101.000000 99.000000 2.000000
a 2 102.000000 98.000000 7.000000
a 3 103.000000 97.000000 15.000000
a 4 104.000000 96.000000 26.000000
a 5 105.000000 95.000000 40.000000
a 6 106.000000 94.000000 57.000000
a 7 107.000000 93.000000 77.000000
a 8 108.000000 92.000000 100.000000
a 9 109.000000 91.000000 126.000000
a 10 110.000000 90.000000 155.000000
(10 行受影响)
*/
SELECT SUM(A.T1-B.T2) AS TOTAL,A.CODE
FROM #K A
OUTER APPLY (SELECT T2 FROM #K WHERE A.CODE=CODE AND SORT<=A.SORT AND SORT>A.SORT-10) AS B
GROUP BY A.CODE
UPDATE #K
SET T3=A.TOTAL
FROM
(SELECT SUM(A.T1-B.T2) AS TOTAL,A.CODE
FROM #K A
OUTER APPLY (SELECT T2 FROM #K WHERE A.CODE=CODE AND SORT<=A.SORT AND SORT>A.SORT-10) AS B
GROUP BY A.CODE) AS A
JOIN #K B ON A.CODE=B.CODE
SELECT SUM(A.T1-B.T2) AS TOTAL
FROM #K A
OUTER APPLY (SELECT T2 FROM #K WHERE A.CODE=CODE AND SORT<=A.SORT AND SORT>A.SORT-10) AS B
GROUP BY A.CODE
UPDATE #K
SET T3=A.TOTAL
FROM
(SELECT SUM(A.T1-B.T2) AS TOTAL
FROM #K A
OUTER APPLY (SELECT T2 FROM #K WHERE A.CODE=CODE AND SORT<=A.SORT AND SORT>A.SORT-10) AS B
GROUP BY A.CODE) AS A
JOIN #K B ON A.CODE=B.CODE
update a
set a.T3=(select sum(b.t1-a.t2)
from #k b
where b.code=a.code and b.sort<=a.sort and b.sort>a.sort-10)
from #k a