列计算列是否> 1在T-SQL中

时间:2013-05-15 09:57:43

标签: tsql calculated-columns

嗨我正在尝试计算某些列的值,并依赖于某列是否为某个值

if lens.qty > 1 then  (CASE LENS.LNS_PROGTYPE  --DESIGN pOINTS
WHEN 762
THEN 70
when 767
THEN 70
when 768
THEN 70
WHEN 841
THEN 35
WHEN 842
then 35
else 0
end +
case LTRIM(RTRIM(LENS.COATTYP))   --ARC POINTS
when 'HVLL'
then 50
when 'HVLLBLUE'
then 100
else 0
end +
CASE LENS.LNS_IDX   --MATERIAL POINTS
when 53
THEN 35
WHEN 56
THEN 35
WHEN 58
then 35
when 61
then 35
else 0
END +
CASE LENS.LNS_MATCLR  --COLOR POINTS
WHEN 00
THEN 0
WHEN 46
THEN 35
WHEN 47
THEN 35
WHEN 48
then 35
else 0

end as TOTAL_POINTS)*lens.qty / 2

else

CASE LENS.LNS_PROGTYPE  --DESIGN pOINTS
WHEN 762
THEN 70
when 767
THEN 70
when 768
THEN 70
WHEN 841
THEN 35
WHEN 842
then 35
else 0
end +
case LTRIM(RTRIM(LENS.COATTYP))   --ARC POINTS
when 'HVLL'
then 50
when 'HVLLBLUE'
then 100
else 0
end +
CASE LENS.LNS_IDX   --MATERIAL POINTS
when 53
THEN 35
WHEN 56
THEN 35
WHEN 58
then 35
when 61
then 35
else 0
END +
CASE LENS.LNS_MATCLR  --COLOR POINTS
WHEN 00
THEN 0
WHEN 46
THEN 35
WHEN 47
THEN 35
WHEN 48
then 35
else 0

end as TOTAL_POINTS)

我一直收到语法错误,我不知道我哪里出错了 我不知道该怎么做,说实话我不完全理解我所看到的例子你的帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

我会做类似的事情:

(CASE
  WHEN LENS.LNS_PROGTYPE IN (762,767,768) THEN 70
  WHEN LENS.LNS_PROGTYPE IN (841,842) THEN 35
  else 0
end +
case LTRIM(RTRIM(LENS.COATTYP))   --ARC POINTS
  when 'HVLL'      then 50
  when 'HVLLBLUE'  then 100
  else 0
end +
CASE
  WHEN LENS.LNS_IDX IN (53,56,58,61) THEN 35
  else 0
END +
CASE
  WHEN LENS.LNS_MATCLR IN (46,47,48) THEN 35
  else 0
end) * CASE WHEN lens.qty > 1 THEN lens.qty / 2 ELSE 1 END

对于整个表达。但是,正如我所说,我还引入了一些映射表,而不是在CASE表达式中包含所有这些魔术常量。

答案 1 :(得分:0)

您必须确保该字符串/ sum的所有元素具有相同的数据类型。适当地转换/转换它们。