2016-04-14 61 views
1

在下面列出的代码的最后一行中,当前结果为空,因为结果小于1.我需要结果以百分比形式显示,但我不是当然如何。任何建议都非常感谢?MS SQL更改铸造计数VarChar到%

SELECT 
'1,*'+char(13)+char(10) 
+'80,1006058'+char(13)+char(10) 
+'100,10'+char(13)+char(10) 
+'2405,'+cast(count(distinct adt.PAT_ENC_CSN_ID)/420 as varchar(18))+char(13)+char(10) --Census events --as varchar(10) 
+0

的最后一行,你的意思是'投(计数(不同adt.PAT_ENC_CSN_ID)/ 420为varchar(18))' ? – DhruvJoshi

回答

1
SELECT 
'1,*'+char(13)+char(10) 
+'80,1006058'+char(13)+char(10) 
+'100,10'+char(13)+char(10) 
+'2405,'+cast(cast(count(distinct adt.PAT_ENC_CSN_ID) AS FLOAT)/cast(420 AS FLOAT) as varchar(18))+char(13)+char(10) --Census events --as varchar(10) 

你应该cast()你的号码as float否则视为integers和你没有在你的部门因为小数结果也被认为是integer

+0

数学计算时不要使用float,因为它是一个不精确的数据类型,并且会意外地舍入答案。总是使用小数。 – HLGEM

+0

啊!你必须演员演员......我错过了!我的道歉和感谢您的帮助托马斯G/dbbri! –

2

的问题是,你的count(distinct adt.PAT_ENC_CSN_ID)返回一个整数值,然后您可以通过420的另一个整数除法。

如果将计数作为小数或浮点数区分开来,这应该可以解决您的问题。 CAST(COUNT(DISTINCT adt.PAT_ENC_CSN_ID) AS FLOAT)

+0

数学计算时不要使用float,因为它是一个不精确的数据类型,并且会意外地将答案四舍五入。总是使用小数。 – HLGEM

+0

谢谢Dbbri! 但我不确定我在跟踪。它应该看起来像这样吗? + '2405,' +铸造(计数(不同adt.PAT_ENC_CSN_ID)作为浮动)/ 420为varchar(18))+炭(13)+ CHAR(10) –

+0

SELECT '1,*' +炭(13)+ char(10) + '80,1006058'+ char(13)+ char(10) +'100,10'+ char(13)+ char(10) +'2405,'+ cast (CAST(COUNT(DISTINCT adt.PAT_ENC_CSN_ID)AS FLOAT)/ 420 as varchar(18))+ char(13)+ char(10) - 普查事件--as varchar(10) – dbbri

1

只需更换这部分

 cast(count(distinct adt.PAT_ENC_CSN_ID)/420 as varchar(18)) 

 cast(count(distinct adt.PAT_ENC_CSN_ID)/420.00 as varchar(18)) 

请注意,我们所做的只是将420到420.00建议SQL保留小数部分,而不是将结果视为整数。

由于计回报的整数值和整数/整数是一个整数,但整数/小数是十进制的

+0

非常酷...感谢DhruvJoshi! –

+0

很高兴有帮助:) – DhruvJoshi