2016-04-14 34 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