【问题标题】:column Calculation if column > 1in T-SQLcolumn 计算 if column > 1in T-SQL
【发布时间】:2013-05-15 09:57:42
【问题描述】:

嗨,我正在尝试一起计算某些列的值,并取决于列是否为某个值

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)

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

【问题讨论】:

  • IF 是一个语句,应该包含其他语句。如果你想要一个表达式,你应该在整个过程中使用CASE。另外,您是否考虑过引入存储所有这些神奇映射值的表,而不是构建长的 CASE 表达式。

标签: tsql calculated-columns


【解决方案1】:

我会这样做:

(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 表达式中包含所有这些神奇的常量。

【讨论】:

  • 您好,感谢所有回复。我使用了 Damien 建议的脚本,效果很好,但是当我的 qty = 3 时,它不做任何我不明白的计算,它适用于 1、2、4、6 等,但对于 3 什么都没有
  • @KallieReyneke - 如果当前所有内容都在ints 中,并且您希望将计算结果乘以1.5,则需要强制它切换到floats。最后一行中像lens.qty / 2.0 这样简单的东西就足以强制切换。
  • 非常感谢@damien_the_unbeliever 解决了这个问题。
  • 非常感谢@damien_the_unbeliever 解决了这个问题。有什么办法可以让小数点后只有 2 个零,我将玩转演员并转换,看看是否能修复尾随零
  • 嗨,我玩过 cast 和 convert 方法,但我无法摆脱尾随零。这低于我的代码选择 LENS.QTY, (case convert(money ,LENS.LNS_MATCLR,0) --COLOR POINTS when 40 then 35.00 when 41 then 35.00 when 48 THEN 35.00 else 0 end) * case when LENS.QTY > 1然后 LENS.QTY / 2.0 else 1.0 以 TOTAL_POINTS FROM LENS WHERE QTY > 1 AND LENS.LNS_MATCLR in (40,41,48) 结束,它仍然提供 262.50000000 的输出,我尝试转换为 int ,钱无济于事
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    相关资源
    最近更新 更多