SQL sever 實現資料累加
阿新 • • 發佈:2021-02-02
技術標籤: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