2012-11-21 140 views
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列中的「折扣」欄,任何幫助將不勝感激

編輯:

優惠和折扣後不在一個欄我表,我創建這些動態來計算折扣從原來的價格

回答

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 
+0

您好,請看到我的編輯用於更好的解釋,折扣和折扣後,不是表列,我創建這些飛行計算折扣 – Annoscia

+0

@Annoscia這個查詢仍然在做同樣的事情。這些列仍然是根據「價格」列計算 – Taryn

+0

非常感謝您的幫助,非常感謝 – Annoscia