我尝试根据表中列的值更新临时表。我的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命令。
答案 0 :(得分:2)
将CASE视为一个返回值而不是条件的函数。
UPDATE #Accounts
SET NewFARate1 = CASE fa_rows WHEN 2 THEN PctRate2 - PctRate7 WHEN 3 THEN PctRate2 - PctRate7 END,
NewFARate2 = CASE fa_rows WHEN 2 THEN ... etc
...
END
WHERE FA_rows = PR_rows
答案 1 :(得分:2)
CASE
是表达式,而不是语句。它不能用作SQL中的逻辑控件。但是,您可以使用以下内容为您提供结果:
Update #Accounts
Set NewFARate1 = Case
When fa_rows In (2, 3)
Then PctRate2 - PctRate7
Else NewFARate1 End,
NewFARate2 = Case
When fa_rows In (2, 3)
Then PctRate3 - PctRate8
Else NewFARate2 End,
NewFARate3 = Case
When fa_rows In (3)
Then PctRate4 - PctRate9
Else NewFARate3 End
Where FA_rows = PR_rows
上面使用单独的CASE
表达式来确定要更新列值的内容。如果它不在提供的值中,它会将列的值设置为自身 - 因此,不更新列。