34,590
社区成员
发帖
与我相关
我的任务
分享
这种是最好的处理了
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([time] nvarchar(7),[num] int,[nom] int)
Insert #A
select N'上世纪80年代',30,500 union all
select N'上世纪90年代',20,300 union all
select N'本世纪00年代',50,700 union all
select N'本世纪10年代',40,500
Go
;WITH Cte
AS
(
SELECT * , CASE WHEN LEFT([time],1)=N'上' THEN 1900 WHEN LEFT([time],1)=N'本' THEN 2000 END +CAST(SUBSTRING([time],4,2) AS INT) as 年代 FROM #A
)
Select *,
(SELECT SUM([num]) FROM CTE WHERE 年代<=a.年代) AS numA,
(SELECT SUM([nom]) FROM CTE WHERE 年代<=a.年代) as monA
from CTE AS a
/*
time num nom 年代 numA monA
上世纪80年代 30 500 1980 30 500
上世纪90年代 20 300 1990 50 800
本世纪00年代 50 700 2000 100 1500
本世纪10年代 40 500 2010 140 2000
*/
create table tb(dt int,num int,nom int)
insert into tb select 1980,30,500
insert into tb select 1990,20,300
insert into tb select 2000,50,700
insert into tb select 2010,40,500
go
select dt,num,nom,
(select SUM(num) from tb where dt<=a.dt) numA,
(select SUM(nom) from tb where dt<=a.dt) numB
from tb a
/*
dt num nom numA numB
----------- ----------- ----------- ----------- -----------
1980 30 500 30 500
1990 20 300 50 800
2000 50 700 100 1500
2010 40 500 140 2000
(4 行受影响)
*/
go
drop table tb
use Tempdb
go
--> -->
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([time] nvarchar(7),[num] int,[nom] int)
Insert #A
select N'上世纪80年代',30,500 union all
select N'上世纪90年代',20,300 union all
select N'本世纪00年代',50,700 union all
select N'本世纪10年代',40,500
Go
IF OBJECT_ID('Tempdb..#') IS NOT NULL
DROP TABLE #
SELECT * , CASE WHEN LEFT([time],1)=N'上' THEN 1900 WHEN LEFT([time],1)=N'本' THEN 2000 END +CAST(SUBSTRING([time],4,2) AS INT) as 年代 INTO # FROM #A
Select *,
(SELECT SUM([num]) FROM # WHERE 年代<=a.年代) AS numA,
(SELECT SUM([nom]) FROM # WHERE 年代<=a.年代) as monA
from # AS a
/*
time num nom 年代 numA monA
上世纪80年代 30 500 1980 30 500
上世纪90年代 20 300 1990 50 800
本世纪00年代 50 700 2000 100 1500
本世纪10年代 40 500 2010 140 2000
*/
declare @c int
set @c = (select top 1 id from #yearDate_New order by id desc)
create table #yearDateA(yearTime varchar(10),FNumberA int,FTotalPriceA numeric(18,2))
insert into #yearDateA
select b.yearTime,sum(a.FNumber),sum(a.FTotalPrice)
from #yearDate_New a inner join (select id,yearTime,FNumber,FTotalPrice from #yearDate_New) b on a.id<=b.id
where (b.id<=@c)
GROUP BY b.id
ORDER BY b.id