【发布时间】:2015-10-18 05:30:13
【问题描述】:
尝试获取 select case 语句来控制是否没有任何反应或根据来自两个不同表的三个字段的总和来更新表。其中一个表是临时表 (#tempGLsum)。这包含 id 字段和总金额。 tblPcardGL 表中的“amt”字段不应低于 0(零)。如果是这样,那么流程应该停止。如果它仍然 > 0,则将运行下一个代码块,更新 tblPcardGL 表。
如有任何帮助,我们将不胜感激! 谢谢
declare @glID int
create table #tempGLsum
(glID int, sumAmt decimal(18,2))
insert into #tempGLsum
(glID, sumAmt)
select tblPcardReclass.glID,
sum(tblPcardReclass.reclassAmt)
from tblPcardReclass
where tblPcardReclass.glID = @glID
group by tblPcardReclass.glID
select
case when (tblPcardGL.orgAmt - tblPcardGL.amt - #tempGLsum.sumAmt) < 0
then 'stop here and let the user know it's below zero'
else
'run the code_below'
end
from tblPcardGL
left outer join #tempGLsum ON
tblPcardGL.glID = #tempGLsum.glID
where tblPcardGL.glID = @glID
--code_below
update tblPcardGL
set amt =
(
select
case (select COUNT(*) as numRecs from #tempGLsum)
when 0 then
tblPcardGL.orgAmt
else
(tblPcardGL.orgAmt - #tempGLsum.sumAmt)
end
)
from tblPcardGL
left outer join #tempGLsum ON
tblPcardGL.glID = #tempGLsum.glID
where tblPcardGL.glID = @glID
【问题讨论】:
-
选择语句不会“在中间停止并执行下面的一些代码”。这根本不是这样的。我认为您需要尝试更清楚地解释您在这里要做什么。
-
你在寻找类似
if ( select case ... end ) = 42 begin ... end else begin ... end;的东西吗? -
@SeanLange:嗯,这就是我最终想要做的。但如果它不能那样工作,那也没关系。我愿意以任何方式工作。所以,我需要做的是当用户通过网页提交和调整这条记录时,“剩余金额”(amt)字段不能小于零。 “原始金额”决定了可以调整多少。调整的记录可以有好几条,所以我一开始就把它们加起来。然后我想评估 org amt 减去现有 amt 之间的差异。我正在接近 Brian Pressler 的回应。
标签: sql-server tsql sql-update case