十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你这SQL是利用UPDATE的执行顺序来运行的
专业成都网站建设公司,做排名好的好网站,排在同行前面,为您带来客户和效益!创新互联建站为您提供成都网站建设,五站合一网站设计制作,服务好的网站设计公司,成都网站设计、做网站负责任的成都网站制作公司!
在UPDATE批量数据的时候,先给变量 @nDiffQty赋值,再根据数量层层减nQty的值赋值给原来的nDiffQty。
大概逻辑就是根据Type非则取总数,否则用原来的总数来减原列数量并赋值。感觉这个逻辑会因执行UPDATE的顺序而有差异。
如果转成Oracle的话可以用以下SQL:
----------------------先弄两个值
DECLARE
n_DiffQty NUMBER;
s_Type VARCHAR2
(4);
-----------------生成游标------------------
CURSOR aa
IS
select id, sType,nSumQty, nQty from #1;
-------------------循环----------------
FOR
a IN aa
LOOP
IF (a.sType='')
THEN
n_DiffQty:=a.nSumQty;
ELSE
n_DiffQty:=n_DiffQty-a.nQty;
END IF;
Update #1 Set nDiffQty = n_DiffQty where id=a.id;
END LOOP;
update B set TotalPrice=Price*Number from B join A on A.BookID=B.BookID
或
update B set TotalPrice=Price*Number from B , A where A.BookID=B.BookID
将两条查询语句作为子查询的一部分连表.
select t1.count1+t2.count2 as 'countSum',t1.branch
(select count as count1, branch from table1 group by branch)t1
(select count as count2, branch from table2 group by branch)t2 on t1.branch =t2.branch
这种写法有一个潜在的限制,t1中的branch 必须包含t2,所以你的需求一般这么写:
select sum(counts)counts,branch
from(select * from(select count as counts, branch from table1 group by branch)t1
union
select * from(select count as counts, branch from table2 group by branch )t1)t
group by branch
不管是sql语句里还是存储过程里,没有什么特别的函数来作乘法去处,直接用*是可以的,可能还是你的语法哪里没写对
你的time,不一样。如果去掉重复的。是time这个字段不要,还是要哪一条数据?
你用的开窗函数,一般都是用来做排序的,去掉重复的,还是要用分组。
dateadd是一个用来相加的一个函数,dd指的是日期里面的日,DATEADD(dd,
DATEDIFF(dd,0,getdate()),
0)
意思是将DATEDIFF(dd,0,getdate())函数返回的日期增加0天,如果将0改成1,DATEADD(dd,
DATEDIFF(dd,0,getdate()),
1)那就是加一天
DATEDIFF函数返回的是两个日期之间的间隔,dd就是间隔多少天。