我正在尝试使用id列和前一个val列来计算val列。在Excel上,我只使用公式" = IF(B2 = 1,1,C1 + B2)"。如何引用我的列的前一个值?
id val
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55
我的查询看起来像
SELECT id,
Case
When id =1 then 1
Else id+*previousval*
end as val
from
tab
答案 0 :(得分:0)
您可以尝试 SQL Server 的此解决方案(使用变量将为您提供最佳性能):
DECLARE @TempTable TABLE (Id INT, Val INT)
INSERT INTO @TempTable VALUES(1,0)
INSERT INTO @TempTable VALUES(2,0)
INSERT INTO @TempTable VALUES(3,0)
INSERT INTO @TempTable VALUES(4,0)
INSERT INTO @TempTable VALUES(5,0)
INSERT INTO @TempTable VALUES(6,0)
INSERT INTO @TempTable VALUES(7,0)
DECLARE @PrevSum INT = 0
UPDATE @TempTable
SET @PrevSum = Val = @PrevSum + Id
FROM @TempTable
SELECT * FROM @TempTable
答案 1 :(得分:0)
如果您可以标记您的DBMS及其版本,那就更好了。
假设您使用的是SQL Server:
SQL Server低于2012 (您可以使用公用表表达式 - CTE )
CREATE TABLE #TEST(ID INT)
INSERT INTO #TEST VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
;WITH CTE
as
(
SELECT ID, ID AS VALUE FROM #TEST WHERE ID=1
UNION ALL
SELECT T.ID, T.ID + C.VALUE
FROM #TEST T INNER JOIN CTE C ON T.ID = C.ID+1
)
SELECT * FROM CTE
DROP TABLE #TEST
SQL Fiddle for version 2012 Below
SQL Server 2012:(您可以使用OVER
子句)
CREATE TABLE #Test(ID INT)
INSERT INTO #Test VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
SELECT id, SUM(id) OVER(ORDER BY id) AS [Value] FROM #Test ORDER BY id
DROP TABLE #Test