SQL 쿼리를 통해 소수점 두 자리 만 표시되도록 노력하고 있습니다. 불행히도 그것은 매우 복잡한 쿼리이고 "decimal (18,2)"의 모든 조합은 작동하지 않습니다.캐스트를 사용할 때 10 진수 반올림 문제
SELECT DISTINCT
Company_Name AS Company, CASE WHEN isnull((CAST(IsNull(SUM(Margin), 0)/CASE isnull(SUM(invoiceamt), 0) WHEN 0 THEN 1 ELSE SUM(invoiceamt)
END * 100 AS decimal(18, 2))/70), 0) < 0 THEN 0 ELSE (CAST(IsNull(SUM(Margin), 0)/CASE isnull(SUM(invoiceamt), 0)
WHEN 0 THEN 1 ELSE SUM(invoiceamt) END * 100 AS decimal(18, 2))/70) END * 100 AS Service_Goal
FROM v_cbi_Agr_Mo_Billing_History3
WHERE (1 = 1) AND (dbo.udf_cbi_InternalCompanyName() <> Company_Name) AND (DATEDIFF(mm, GETDATE(), MonthStart) BETWEEN 0 AND 0) AND
(AGR_Type_Desc IN ('Agreement1', 'Agreement2', 'Agreement3'))
GROUP BY Company_Name
HAVING (SUM(Margin) <> 0) OR
(SUM(InvoiceAmt) <> 0)
ORDER BY Company
이 도움이 어려울 것! 어떤 오류가 발생하고 있습니까? 'Service_Goal' 열에있는 모든 구성 요소를 분리 해 볼 수 있습니다. 일단 그들이 모두 예상대로 작동하면 다시 넣거나 그냥 임시 테이블에 기록하려고 할 수 있습니다. 또한 isnull 및 정수에 소수를 추가하여 INT를 캐스팅하지 못하게 할 때 도움이되는 경우가 있습니다 ('ISNULL (x, 0.)''x/70.') – Malk