我想基于表中列的值更新临时表。我的CASE声明似乎不起作用。有任何想法吗?非常感谢。无法执行与CASE语句更新
这里是我创建临时表的地方。这些列包含值。
IF OBJECT_ID('tempdb..#Accounts') IS NOT NULL DROP TABLE #Accounts;
Create Table #Accounts
(
FA_rows bigint,
PR_rows bigint,
NewFARate1 decimal(10,5),
NewFARate2 decimal(10,5),
NewFARate3 decimal(10,5),
NewFARate4 decimal(10,5),
NewFARate5 decimal(10,5),
PctRate1 decimal (10,5),
PctRate2 decimal (10,5),
PctRate3 decimal (10,5),
PctRate4 decimal (10,5),
...PctRate10 decimal (10,5)
)
这里的尝试更新(我已经添加了更多细节):
UPDATE #Accounts
--when fa_rows is 2 I need to do this
SET NewFARate1 = CASE FA_rows WHEN 2 THEN PctRate12 - PctRate7 END,
NewFARate2 = CASE FA_rows WHEN 2 THEN PctRate3 - PctRate8 END,
---when fa_rows is 3 I need to do this
SET NewFARate1 = CASE FA_rows WHEN 3 THEN PctRate12 - PctRate7 END,
NewFARate2 = CASE FA_rows WHEN 3 THEN PctRate3 - PctRate8 END,
NewFARate3 = CASE FA_rows WHEN 3 THEN PctRate3 - PctRate8 END
--when fa_rows is 4 I need to do this
SET NewFARate1 = CASE WHEN 4 THEN PctRate2 - PctRate7 END,
NewFARate2 = CASE WHEN 4 THEN PctRate3 - PctRate8 END,
NewFARate3 = CASE WHEN 4 THEN PctRate4 - PctRate9 END,
NewFARate4 = CASE WHEN 4 THEN PctRate5 - PctRate10 END
WHERE FA_rows = PR_rows
此代码显然是行不通的。预处理器不像多个SET命令。
它不是'CASE' *声明*,它是*表达式*。 'CASE'不能用作SQL中的控制流。 – Siyual
这不起作用。 CASE语句不是IF/ELSE逻辑。 –
为什么有人会低估这一点?这似乎是一个完全合法的问题,并且误解了某些事情是如何运作的。 –