0

我正在尝试从商品的总价中创建折扣,这一切都有效,但是当我到达“折扣后”时,我收到以下错误“无法将 char 值转换为金钱。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 列中减去“折扣”列,我们将不胜感激

编辑:

折扣和折扣后不是我表中的列,我动态创建这些以计算原始价格的折扣

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 回答