我正在尝试找出最合适的方法:
If C="WORD":
A = 51 if B is between 0 and 2000
A = 102 if B is between 2001 and 8000
A = 204 if B is higher than 8000
AND if D is ticked (checkbox) the A value turns into half`
我需要将此列“保留”,以便可以在报告中使用它。
对于其他专栏文章,我已经使用了它并且可以工作:
ALTER TABLE dbo.mytable
ADD C AS (A + B) / CASE D WHEN 1 THEN 4 ELSE 2 END;
从其他代码开始,但是它不起作用,并且仍然没有复选框的条件。
ALTER TABLE dbo.tablename
ADD FieldA AS (CASE
WHEN FieldC = "Word"
THEN
CASE
WHEN FieldB > 0 AND FieldB < =2000
THEN 102
WHEN FieldB > 2000 AND FieldB <= 8000
THEN 204
WHEN FieldB > 8000
THEN 306
ELSE NULL
END,
任何人都可以发光吗?
谢谢。
答案 0 :(得分:3)
您的尝试“无效”,因为您有两个CASE
表达式和只有一个END
。每个END
需要一个CASE
。
答案 1 :(得分:0)
希望这会起作用:
ALTER TABLE dbo.tablename
ADD FieldA AS (CASE WHEN FieldC = "Word" and (FieldB>0 AND FieldB<=2000) THEN 51
WHEN FieldC = "Word" and (FieldB>2000 AND FieldB<=8000) THEN 102
WHEN FieldC = "Word" and (FieldB>8000 ) THEN 204
ELSE NULL
END
)
答案 2 :(得分:0)
从短期来看,Tab对您的错字是正确的。
从更大的角度看,您可以利用CASE
条件按顺序求值这一事实,从而节省一些CPU时间,因此,如果倒退,则只需求值最后一个参数。另外,通过使用POWER
技巧,您可以避免division by 0
错误,而不必引入另一个CASE
表达式。
如果FieldD有点,则包括在内。
FieldA
的值在您的问题陈述和代码之间有所不同。我使用了问题陈述。如果需要,请更改。
ALTER TABLE dbo.tablename
ADD FieldA AS
(
CASE
WHEN FieldC = "Word" THEN
CASE
WHEN FieldB > 8000
THEN 204
WHEN FieldB > 2000
THEN 102
WHEN FieldB >= 0
THEN 51
ELSE NULL
END
END
/ POWER(2,FieldD) --<--- Or, possibly, POWER(2,CAST(FieldD AS tinyint))
)