案例选择陈述

时间:2012-11-21 17:11:59

标签: sql sql-server case inner-join subtraction

我正在尝试从商品的总价格中创建一个折扣,这一切都有效但是当我到达折扣后#39;我收到以下错误'无法将char值转换为money。 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列中的列,任何帮助将不胜感激

修改

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

1 个答案:

答案 0 :(得分: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