这种循环的逻辑在SQL中如何实现?

dg831451 2018-10-23 02:37:34


如上图,这种在SQL是不是用什么循环来实现才可?
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dg831451 2018-10-23
  • 打赏
  • 举报
回复
好吧。谢谢版主了。我之前也搜索到你这个链接的地方了。进行了设置。但是DB2中按这样。不能创建主键,会报错。。。。我只有尝试先把数据保存起来。你说设置主键,我只有弄一个ID序号上去了(结合DB2中case when ROW_NUMBER() OVER (PARTITION BY这种语法来试来了)
吉普赛的歌 2018-10-23
  • 打赏
  • 举报
回复
引用 2 楼 dg831451 的回复:
谢谢版主,这个在DB2数据库里面不行。我查了一下。DB2中没有自增。。。。。。
sqlserver 真是个大杂烩, 都往里发其它贴呀 自增不是关键, 但应该需要一个主键, 因为开窗函数需要正确的排序。 试了一下, 按常量排序还不行, 所以你最好还是加一个 int 型主键上去。 另外, 找了一下 db2 也可以设置自增主键的, 你试下:https://www.cnblogs.com/mjhuang/articles/4711586.html
dg831451 2018-10-23
  • 打赏
  • 举报
回复
谢谢版主,这个在DB2数据库里面不行。我查了一下。DB2中没有自增。。。。。。
吉普赛的歌 2018-10-23
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('t1') IS NOT NULL DROP TABLE t1
IF OBJECT_ID('t2') IS NOT NULL DROP TABLE t2
GO
CREATE TABLE t1(
    pid INT PRIMARY KEY,
    num INT   
);
INSERT INTO t1 VALUES (300045,12);
CREATE TABLE t2(
	t2Id INT IDENTITY(1,1) PRIMARY KEY,
	pid INT,
	rNum INT	
)
INSERT INTO t2 VALUES (300045,3);
INSERT INTO t2 VALUES (300045,6);
INSERT INTO t2 VALUES (300045,2);
INSERT INTO t2 VALUES (300045,8);
--以上为测试表及测试数据

SELECT 
	t2.pid
	,t2.rNum
	,SUM(rNum) OVER(ORDER BY t2Id) AS total
	,CASE WHEN t1.num - SUM(rNum) OVER(ORDER BY t2Id)>0 THEN t1.num - SUM(rNum) OVER(ORDER BY t2Id) ELSE 0 END AS inventory  
	,CASE WHEN SUM(rNum) OVER(ORDER BY t2Id)>t1.num THEN 'no' ELSE 'yes' END AS remark
FROM t2 INNER JOIN t1 ON t1.pid=t2.pid

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧