2014-09-04 17 views
0

我在這裏有一個方差報告查詢我需要「方差」在方差列中沒有10個小數點。將方差結果舍入到第100位最方便的方法是什麼?在SQL查詢中將列設置爲第100個十進制

WITH A AS 
(
select 
A.FACTORY, 
A.JOB_NUMBER, 
A.PROCESS_STAGE, 
A.PART_CODE, 
B.PART_DESC_1, 
A.INPUT_QTY_STD, 
A.QUANTITY_INPUT, 
A.QUANTITY_OUTSTANDING, 
A.INPUT_QTY_ACTUAL, 
(A.QUANTITY_OUTSTANDING*100/NULLIF(A.INPUT_QTY_STD,0)) as variance, 
A.ACTUAL_CLOSE_DATE 

from 
(select * from [man_prod].[dbo].[JOB_STAGE_LINES] 
where JOB_NUMBER in (select JOB_NUMBER from JOB_OUTPUTS where 
BF_QTY_ACTUAL<>0 
and ABS(DATEDIFF(HOUR,ACTUAL_CLOSE_DATE,GETDATE())) < 12 and STATUS_FLAG='C' 
)) A 
join fin_prod.dbo.PRODUCT_MASTER B 
ON A.PART_CODE=B.PART_CODE 
WHERE 
A.INPUT_QTY_STD<>0 and 
A.QUANTITY_OUTSTANDING <>0 
) 

SELECT * FROM A WHERE A.variance >10.000000 OR A.variance <-10 
order by PROCESS_STAGE asc ,PART_CODE asc, variance desc ; 

的差異列出來的00.0000000000我需要它來顯示00.000或00.000000

幫助是極大的讚賞

回答

0

使用MySQL ROUND()功能,第二個參數是小數,如果數量這是積極的。

ROUND((A.QUANTITY_OUTSTANDING*100/NULLIF(A.INPUT_QTY_STD,0)), 3) as variance, 

在這個例子中,如果值是0.0000000000將被舍入到小數點後3位,或0.000

0

可以使用TRUNCATE選項:

TRUNCATE((A.QUANTITY_OUTSTANDING*100/NULLIF(A.INPUT_QTY_STD,0)), 3) as variance, 

或使用ROUND如果您正在尋找四捨五入(由doublesharp的建議)

ROUND((A.QUANTITY_OUTSTANDING*100/NULLIF(A.INPUT_QTY_STD,0)), 3) as variance, 
+0

該問題要求四捨五入截斷。 – doublesharp 2014-09-04 18:26:41

0

使用Convert將其轉換爲一個所需長度的十進制是我更喜歡的時候,我實際上並沒有舍入值,只是格式化。

CONVERT(DECIMAL(10,3),10000) 
+0

這將放置在查詢中以影響方差格式? – 2014-09-05 19:09:35

+0

CONVERT(DECIMAL(10,3),A.variance)FROM WHERE A.variance> 10.000000或A.variance <-10 – 2014-09-05 19:35:28

相關問題