id 数量 仓库
1 20 1
2 30 2
3 80 3
如何使用sql存储过程查询出按照编号正序数量累加值和=100的那一部分
体现结果如下
id 数量 仓库
1 20 1
2 30 2
3 50 3如何写存储过程?请高手指教!
1 20 1
2 30 2
3 80 3
如何使用sql存储过程查询出按照编号正序数量累加值和=100的那一部分
体现结果如下
id 数量 仓库
1 20 1
2 30 2
3 50 3如何写存储过程?请高手指教!
解决方案 »
- 为什么创建函数create function中不可以使用exec语句?
- 如何动态生成一个临时表,每列是某个月的日期,比如一月份,就有31列,字段名为 列1 到 列31,也就是说列数不固定,如何动态生成这样的临时表呢?
- 表去重 使用关键字 delete not exists
- SQL 2005
- 请问:nvarchar 和 varchar 两种数据类型有什么区别? 如果应用在网页中,两种数据类型又各有哪些优势?
- SQL 语句优化 求助大侠
- 关于sqlserver2005远程表复制的问题
- sql语句中 for xml 用法疑问
- 如何删除重复的数据?
- 提示:[Microsoft][ODBC SQL Server Driver]语法错误或访问冲突 是什么原因?
- 请帮忙分析下数据库查询过慢的原因
- sql中统计查询优化问题
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([id] [int],[数量] [int],[仓库] [int])
INSERT INTO [tb]
SELECT '1','20','1' UNION ALL
SELECT '2','30','2' UNION ALL
SELECT '3','80','3'--SELECT * FROM [tb]-->SQL查询如下:
IF object_id('p_test') >0
DROP PROC p_test
GO
CREATE PROC p_test
@sumsl INT
AS
SELECT id,
数量=CASE
WHEN 数量-(sumsl-@sumsl)<=0 THEN 0
WHEN sumsl-@sumsl<=0 THEN 数量
ELSE 数量-(sumsl-@sumsl)
END
FROM (
SELECT *,sumsl=(SELECT SUM([数量]) FROM tb WHERE id<=t.id)
FROM tb t
) t
GO
EXEC p_test 100
/*
id 数量
----------- -----------
1 20
2 30
3 50(3 行受影响)
*/
IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb
GO
CREATE TABLE tb
(
id int identity,
数量 INT,
仓库 INT,
CONSTRAINT PK_TB PRIMARY KEY (id)
)
GO
INSERT TB
SELECT 20 ,1 UNION ALL
SELECT 30 ,2 UNION ALL
SELECT 50 ,3 UNION ALL
SELECT 80 ,3
--查询
SELECT * FROM TB T
WHERE (SELECT SUM(数量) FROM TB WHERE ID<=T.ID)<=100
ORDER BY ID
--结果
/*
(4 行受影响)
id 数量 仓库
----------- ----------- -----------
1 20 1
2 30 2
3 50 3(3 行受影响)
*/
IF object_id('p_test') >0
DROP PROC p_test
GO
CREATE PROC p_test
@sumsl INT
AS
SELECT id,
数量=CASE
WHEN 数量-(sumsl-@sumsl)<=0 THEN 0
WHEN sumsl-@sumsl<=0 THEN 数量
ELSE 数量-(sumsl-@sumsl)
END,
[仓库]
FROM (
SELECT *,sumsl=(SELECT SUM([数量]) FROM tb WHERE id<=t.id)
FROM tb t
) t
GO
EXEC p_test 100
/*
id 数量 仓库
----------- ----------- -----------
1 20 1
2 30 2
3 50 3(3 行受影响)
*/modify
create table T (id smallint, [数量] smallint, [仓库] char(1))
goinsert into T
select 1,20,'1' union all
select 2,30,'2' union all
select 3,50,'3' union all
select 4,60,'4'
go--存储过程
create proc prc_Test
as select a.id,a.[数量],a.[仓库]
from T as a join T as b on b.id<=a.id
group by a.id,a.[数量],a.[仓库]
having sum(b.[数量])<=100
--运行
exec prc_Test/*
id 数量 仓库
------ ------ ----
1 20 1
2 30 2
3 50 3
*/