2013-10-17 2 views
0

저는 var을 만들고 일부 계산을 수행하는 SQL 쿼리 (SQL Server 2005)가 있습니다. 수학은 티켓 수가 0 또는 250000 일 때 작동하지만 티켓 수가 다른 값일 때 소수점을 만들지 않습니다. (그것은 0을 읽고) 다음은 쿼리입니다 -SQL 쿼리의 수학이 작동하지 않습니다.

DB를에 ticketCount는 250000의 많은 티켓을 판매 남아 어떻게
SELECT ticketCount, ((250000 - ticketCount)/250000) * 100 AS percentSold 
FROM raffleTickets 

. ticketCount이 250000이면 percentsold은 0이며 올바른 값입니다. ticketCount이 0 인 경우 percentSold은 100이며 올바른 값입니다. 다른 모든 값은 percentSold이 0을 반환합니다.

도와주세요! 감사.

+5

정수 분리 문제가있는 것으로 판단됩니다. 추측에 따라 각 숫자에'.0 '을 추가하십시오. –

+0

각 250000에 .0을 추가하면 올바른 백분율이 반환됩니다. 자, 소수 자릿수로 어떻게 제한할까요? 쿼리 나 디스플레이에서 그렇게합니까? 이것은 XML 파일을 구동합니다. 표시 : writer.WriteElementString ("percentsold", myReader [ "percentSold"]. ToString()); – user2697262

+1

writer.WriteElementString ("percentsold", ((10 진수) myReader [ "percentSold"]). ToString ("N1")); –

답변

1

SQL Server는 정수 나누기를 수행합니다 (데이터베이스마다 다름).

당신은 쉽게 상수 후 소수점을 넣어이 문제를 해결 할 수는 정수 부분을 원하는 경우에

SELECT ticketCount, ((250000.0 - ticketCount)/250000.0) * 100.0 AS percentSold 
FROM raffleTickets; 

, 당신은 다시 정수로 결과를 cast() 수 있습니다. 또는 str() 함수를 사용하여 percentSold 값을 적절한 소수 자릿수의 문자열로 변환 할 수 있습니다. 귀하의 수식이 정확

0

,

PercentSold = (TotalTickets - TicketsRemaining)/TotalTickets 

그러나 위의 함수의 도메인 및 범위 무엇인가? 당신의 숫자는 모두 정수로 표현되지만, 아마도 Real로 계산하려고합니다.

PercentSold = ((TotalTickets - TicketsRemaining)*100.0)/(TotalTickets) 

이렇게하면 계산이 강제로 완료됩니다. 특정 유형 (예 : 도메인)에서 변수 및 계산을 선언하는 방법을 알고있는 언어는이를 더 분명하고 명확하게 만들 수 있습니다.

정확한 정밀도로 실수를 나타내려면 출력 형식을 지정해야합니다. SqlServer에는 실제 도메인의 숫자에 대한 출력 형식을 지정하는 방법이 있어야합니다. 형식에 대한 답변은 SqlZoo.net입니다.

관련 문제