27,579
社区成员
发帖
与我相关
我的任务
分享
--> 测试数据:#tb1
if object_id('tempdb.dbo.#tb1') is not null drop table #tb1
go
create table #tb1([序号] int,[产品名] varchar(4),[数量] int)
insert #tb1
select 1,'衣加',500 union all
select 2,null,200 union all
select 3,'菜板',600 union all
select 4,null,700 union all
select 5,null,800 union all
select 6,'桌子',195 union all
select 7,'凳子',350
go
alter table #tb1 add s int
go
declare @i int
set @i = 0
update #tb1
set s = @i,@I = case when [产品名] is not null then 数量 else @i+数量 end
select * from #tb1
drop table #tb1
序号 产品名 数量 s
----------- ---- ----------- -----------
1 衣加 500 500
2 NULL 200 700
3 菜板 600 600
4 NULL 700 1300
5 NULL 800 2100
6 桌子 195 195
7 凳子 350 350
(7 行受影响)
;with cte as
(
select 序号,产品名=ISNULL(产品名,(select top 1 产品名 from #tb1 where z.序号>序号 and 产品名 is not null order by 序号 desc )),数量
from #tb1 z)
select p.序号,t.产品名,t.数量,累计=(select SUM(数量) from cte where p.产品名=产品名 and p.序号>=序号 )
from cte p join #tb1 t on p.序号=t.序号
if object_id('tempdb.dbo.#tb1') is not null
drop table #tb1
go
create table #tb1([序号] int,[产品名] varchar(4),[数量] int)
insert #tb1
select 1,'衣加',500 union all
select 2,null,200 union all
select 3,'菜板',600 union all
select 4,null,700 union all
select 5,null,800 union all
select 6,'桌子',195 union all
select 7,'凳子',350
go
select 序号,产品名=ISNULL(产品名,(select top 1 产品名 from #tb1 where z.序号>序号 and 产品名 is not null order by 序号 desc )),数量
into k
from #tb1 z
select p.序号,t.产品名,t.数量,累计=(select SUM(数量) from k where p.产品名=产品名 and p.序号>=序号 )
from k p join #tb1 t on p.序号=t.序号
/*
序号 产品名 数量 累计
----------- ---- ----------- -----------
1 衣加 500 500
2 NULL 200 700
3 菜板 600 600
4 NULL 700 1300
5 NULL 800 2100
6 桌子 195 195
7 凳子 350 350*/
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-03-07 16:39:35
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#tb1
if object_id('tempdb.dbo.#tb1') is not null drop table #tb1
go
create table #tb1([序号] int,[产品名] varchar(4),[数量] int)
insert #tb1
select 1,'衣加',500 union all
select 2,null,200 union all
select 3,'菜板',600 union all
select 4,null,700 union all
select 5,null,800 union all
select 6,'桌子',195 union all
select 7,'凳子',350
--------------开始查询--------------------------
UPDATE T SET 产品名=
(SELECT TOP 1 产品名 FROM #TB1 WHERE 产品名 IS NOT NULL AND 序号<T.序号 ORDER BY 序号 DESC)
FROM #TB1 T WHERE 产品名 IS NULL
--SELECT * FROM #TB1
select
*,
(SELECT SUM(数量) FROM #TB1 WHERE 产品名=T.产品名 AND 序号<=T.序号)AS 累加值
from #tb1 T
----------------结果----------------------------
/*
(所影响的行数为 7 行)
(所影响的行数为 3 行)
序号 产品名 数量 累加值
----------- ---- ----------- -----------
1 衣加 500 500
2 衣加 200 700
3 菜板 600 600
4 菜板 700 1300
5 菜板 800 2100
6 桌子 195 195
7 凳子 350 350
(所影响的行数为 7 行)
*/
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-03-07 16:39:35
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#tb1
if object_id('tempdb.dbo.#tb1') is not null drop table #tb1
go
create table #tb1([序号] int,[产品名] varchar(4),[数量] int)
insert #tb1
select 1,'衣加',500 union all
select 2,null,200 union all
select 3,'菜板',600 union all
select 4,null,700 union all
select 5,null,800 union all
select 6,'桌子',195 union all
select 7,'凳子',350
--------------开始查询--------------------------
UPDATE #TB1 SET 产品名='衣加' WHERE 产品名 IS NULL OR 产品名='菜板'
select
*,
(SELECT SUM(数量) FROM #TB1 WHERE 产品名=T.产品名 AND 序号<=T.序号)AS 累加值
from #tb1 T
----------------结果----------------------------
/*
(所影响的行数为 7 行)
(所影响的行数为 4 行)
序号 产品名 数量 累加值
----------- ---- ----------- -----------
1 衣加 500 500
2 衣加 200 700
3 衣加 600 1300
4 衣加 700 2000
5 衣加 800 2800
6 桌子 195 195
7 凳子 350 350
(所影响的行数为 7 行)
*/