2016-04-14 3 views
1

В последней строке кода, который я привел ниже, текущий результат пуст, потому что результат меньше 1. Мне нужны результаты для отображения в процентах, но я не конечно как. Любые предложения приветствуются?MS SQL change Cast Count VarChar to%

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

AH! Тебе нужно бросить бросок ... Я пропустил это! Приносим извинения и благодарим вас за помощь Томаса 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) + символ (10) –

+0

ВЫБОР '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 как 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