2012-11-21 7 views
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 열에서 '할인'열을 빼기 위해 노력하고, 어떤 도움을 이해할 수있을 것이다

편집 :

할인 및 할인 후가에서 열 수없는 내 테이블, 나는 원래 값에서 할인을 계산하기 위해 즉시 작성합니다

답변

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이 쿼리는 여전히 똑같은 일을하고 있습니다. 열은 여전히 ​​'Price' 열을 기준으로 계산됩니다 – Taryn

+0

도움을 주셔서 대단히 감사합니다. 대단히 감사합니다. – Annoscia