请参阅SQL中的上一个计算列

时间:2015-11-27 01:43:31

标签: sql excel select

我正在尝试使用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 

2 个答案:

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

SQL Fiddle: SQL Server 2012