如何准确计算有限总数的百分比

时间:2014-01-15 18:17:10

标签: sql sql-server gridview sql-server-2012

我正在创建一个报告,告诉最终用户在给定的月份内完成了gridview的百分比(记录的总数是有限数)。我有一个gridview,其中包含我已导入的记录,用户必须进入每个记录并更新几个字段。我正在尝试创建一个报告,告诉我在给定月份内完成的记录总数的百分比。我只需要百分比。总数(例如)是2000.

我不确定这里是否需要实际的gridview信息/代码,如果有,请告诉我,我会添加它。

问题是我能够计算总百分比,但是当显示时,表中每一行重复的百分比总和。我正在摸索如何使这个结果只出现一次。

现在这里是我的SQL代码(我使用nvarchar,因为我们从许多非Windows系统导入并获取各种额外字符并为我们的信息添加空格):

Declare @DateCount nvarchar(max);
Declare @DivNumber decimal(5,1);

SET @DivNumber = (.01 * 2541);
SET  @DateCount = (SELECT (Count(date_record_entered) FROM dbo.tablename WHERE date_record_entered IS NOT NULL and date_record_entered >= 20131201 AND date_record_entered <= 20131231); 

SELECT CAST(ROUND(@DivNumber / @DateCount, 1) AS decimal(5,1) FROM dbo.tablename

我们假设在这个例子中,12月份date_record_entered中的记录总数为500.

我已经分别尝试了较小的代码而没有成功。这是我尝试过的最新事情。

我知道我在这里错过了一些简单的东西,但我不确定是什么。

::编辑::

我正在寻找的是因为我的查询的预期结果是在给定月份中修改了记录的百分比。如果完成了500条记录,则为25%。我只想在显示一次而不是25显示此表中的每一行时显示25(并在适用时列出小数点)。

3 个答案:

答案 0 :(得分:1)

为什么从表中选择常量值cast(round(@divNumber / @DateCount, 1) as decimal(5,1)?这是你的问题的原因。 我对sql server不太熟悉,但你可能只想选择没有from子句。

答案 1 :(得分:1)

以下查询应该提供您要查找的内容:

Declare @DivNumber decimal(5,1);

SET @DivNumber = (.01 * 2541);

SELECT 
    CAST(ROUND(@DivNumber / Count(date_record_entered), 1) AS decimal(5,1))
  FROM dbo.tablename 
 WHERE date_record_entered IS NOT NULL 
   and date_record_entered >= 20131201 
   AND date_record_entered <= 20131231

答案 2 :(得分:-1)

select emp.Natinality_Id,mstn.Title as Nationality,count(emp.Employee_Id) as Employee_Count,
count(emp.Employee_Id)* 100.0 /nullif(sum(count(*)) over(),0)  as Nationality_Percentage
FROM Employee as emp
left join Mst_Natinality as mstn on mstn.Natinality_Id = emp.Natinality_Id
where
emp.Is_Deleted='false'
group by emp.Natinality_Id,mstn.Title