0

商品の合計価格から割引を作成しようとしていますが、これはすべて機能しますが、「割引後」になると、「文字値をお金に変換できません」というエラーが表示されます。char 値の構文が正しくありません。

select ma.materialname,
mi.LeadTime,
su.SuppliersName,
'Discount' = CASE WHEN mi.price > 40.000 then (mi.Price / 100) * 10 END,
mi.Price as 'Before Discount',
'After Discount' = Case when 'discount' IS not null then (mi.Price - 'discount') END
from MaterialItem mi
inner join Material ma on mi.MaterialItemID = ma.MaterialID
inner join SupplierDetails sd on mi.SupplierID = sd.SuppliersID
inner join Suppliers su on sd.SuppliersID = su.SuppliersID

mi.price 列から「Discount」列を差し引こうとしています。

編集:

割引と割引後はテーブルの列ではありません。これらをオンザフライで作成して、元の価格から割引を計算します

4

1 に答える 1

2

クエリにはいくつかの問題があります。

まず、エイリアスを一重引用符で囲んでいます。これらは、列名ではなく文字列として解釈されます。

次に、CASEステートメント内でエイリアスを参照していますが、それはできません。で列エイリアスを参照する場合CASEは、式を再度使用するか、次のSELECTように別の式の中にクエリを配置する必要があります。

select materialname,
  LeadTime,
  SuppliersName,
  Discount,
  BeforeDiscount,
  Case when discount IS not null then (BeforeDiscount - discount) END AfterDiscount
from 
(
  select ma.materialname,
    mi.LeadTime,
    su.SuppliersName,
    CASE WHEN mi.price > 40.000 then (mi.Price / 100) * 10 END as Discount,
    mi.Price as BeforeDiscount
  from MaterialItem mi
  inner join Material ma 
    on mi.MaterialItemID = ma.MaterialID
  inner join SupplierDetails sd 
    on mi.SupplierID = sd.SuppliersID
  inner join Suppliers su 
    on sd.SuppliersID = su.SuppliersID
) src
于 2012-11-21T17:16:59.213 に答える