1

こんにちは、特定の列の値を一緒に計算しようとしています。たとえば、列が特定の値であるかどうかによって異なります

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)

構文エラーが発生し続け、どこが間違っているのかわかりません。方法がわからず、正直言って、見た例を完全には理解していません。あなたの助けをいただければ幸いです。

4

2 に答える 2

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ます。

于 2013-05-15T10:19:59.953 に答える
0

その文字列/合計のすべての要素が同じデータ型であることを確認する必要があります。それらを適切にキャスト/変換します。

于 2013-05-15T10:57:15.753 に答える