sql好难写
发布时间: 2024-09-10 02:55:10
⑴ 求助,一个sql语句不会写,跪求帮助啊
--测试表
CreateTableusers
(
nameVarchar(10),
sumscoreint
)
CreateTablesales
(
nameVarchar(10),
scoreint
)
--合并在一起的触发器,批量对sales做增删改都没问题,楼上的写法嘛,嘿嘿
--但有个问题,你的name是关键字,你如果修改name,该怎么处理?
CreateTriggertr_salesonsales
ForInsert,Delete,Update
As
Begin
mergeintousersM
using
(
Selectname,Sum(isnull(score,0))Asscore
From
(
Selectname,scoreFrominserted
Unionall
Selectname,-1*scoreFromdeleted
)S
GroupByname
)N
onM.name=N.Name
WhenmatchedThen
updateSetM.sumscore=M.sumscore+N.score
WhenNotmatchedThen
InsertValues(N.Name,N.score);
End
⑵ 怎么提高写sql语句的能力
不建议在工作中写很复杂的sql语句 这样会让代码复用率降低很多 而且不易后期维护和扩展 建议把复杂的sql语句拆分成多个简单的语句 封装成存储过程 这样会比较好 而且大量的多表查询会让系统延迟很高 容易死锁
⑶ 写sql完全没思路,求sql大佬
首先,业务逻辑有点不清晰,现在假设第一道工序是开浇,开浇有开浇时间和结束时间,结束后在进行停浇工序,停浇有开浇时间和停浇时间。
目前来看,从你给出的数据,开浇和停浇,没有必然的联系,但是从数据分析,从开浇开始到开浇结束,至少用一个整天,而停浇开始时间一定是在开浇结束当天进行的,并且同一个中包号,每次停浇结束后,当天是不会在开浇的。
有了这些条件,应该可以查询了。定义以上的查询结果是表table
select * from table a,table b
where substr(a.停浇时间,1,10)=substr(b.开浇时间,1,10) and a.中包号=b.中包号
热点内容