1. 程式人生 > 其它 >SQL sever 實現資料累加

SQL sever 實現資料累加

技術標籤:SQL server 筆記sql資料庫

題目

有如下一張表Dscore

--測試資料
ways-1
CREATE TABLE Dscore(
monthtime int,
score int
);
INSERT INTO Dscore VALUES (1,10);
INSERT INTO Dscore VALUES (2,20);
INSERT INTO Dscore VALUES (3,30);
INSERT INTO Dscore VALUES (4,50);
INSERT INTO Dscore VALUES (5,40);
INSERT INTO Dscore VALUES (
6,20); INSERT INTO Dscore VALUES (7,30); SELECT * FROM Dscore
--ways-2 建立自增加的monthtime或id列
CREATE TABLE Dscore(
monthtime int Identity(1,1),
score int
);
INSERT INTO Dscore(score) VALUES (10);
INSERT INTO Dscore(score) VALUES (20);
INSERT INTO Dscore(score) VALUES (30);
INSERT INTO Dscore(score) VALUES
(50); INSERT INTO Dscore(score) VALUES (40); INSERT INTO Dscore(score) VALUES (20); INSERT INTO Dscore(score) VALUES (30); SELECT * FROM Dscore

在這裡插入圖片描述

希望將每個月之前的月份進行累加,例如2月份的score=10+20,3月份的score=10+20+30,4月份的score=10+20+30+50,以此類推。

--ways-子查詢
select monthtime,(select sum(score) from  
Dscore B where B.monthtime <=
A.monthtime )score from Dscore A
--ways-連線查詢
select a.monthtime,sum(b.score)score from 
Dscore a,Dscore b where b.monthtime <= a.monthtime group by a.monthtime

在這裡插入圖片描述
思路:當日期這一列如果為數值型等可比較大小的型別時,可使用上述方法;當日期這一列為文字型等不可比較大小的型別時,如下面這張表

--測試資料
CREATE TABLE DDscore(
monthtime varchar(23),
total int
);
INSERT INTO DDscore VALUES ('一月份',10);
INSERT INTO DDscore VALUES ('二月份',20);
INSERT INTO DDscore VALUES ('三月份',30);
INSERT INTO DDscore VALUES ('四月份',50);
INSERT INTO DDscore VALUES ('五月份',40);
INSERT INTO DDscore VALUES ('六月份',20);
INSERT INTO DDscore VALUES ('七月份',30);

select * from DDscore

在這裡插入圖片描述

先建立臨時表,帶可比較大小的id列

--建立臨時表
SELECT IDENTITY(int,1,1) as id,* INTO #D FROM DDscore SELECT * FROM #D  

在這裡插入圖片描述
再使用之前的方法

select monthtime,(select sum(score) from  #D B where B.id <= A.id )score from #D A 

在這裡插入圖片描述
補充:刪除臨時表

--刪除臨時表
if object_id('tempdb..#D') is not null Begin  
    drop table #D
End