2014-09-04 47 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

相关问题