计算日期百分比(SQL Server)

时间:2013-04-15 18:36:49

标签: asp.net tsql sql-server-2012 percentage

我正在尝试在SQL Server 2012 Express中添加一个自动计算字段,用于存储项目完成百分比,方法是使用以下方法计算日期差异:

ALTER TABLE dbo.projects
ADD PercentageCompleted AS (select COUNT(*)  FROM projects WHERE project_finish > project_start) * 100 / COUNT(*)

但是我收到了这个错误:

Msg 1046, Level 15, State 1, Line 2
Subqueries are not allowed in this context. Only scalar expressions are allowed.

我做错了什么?

3 个答案:

答案 0 :(得分:0)

我认为你不能那样做。您可以编写一个触发器来计算它,或者将其作为更新语句的一部分。

答案 1 :(得分:0)

即使它有可能(事实并非如此),但无论如何都不是你想要作为一个计算列的东西:

  1. 每行的值相同
  2. 每次插入/更新后都需要更新整个表
  3. 您应该考虑在stored procedure或用户defined function中执行此操作。或者在应用程序的业务逻辑中更好,

答案 2 :(得分:0)

您是否将“percentageCompleted”作为重复列值存储在与项目数据相同的表中?

如果是这种情况,我不建议这样做,因为它会复制数据。

如果您不关心重复数据,请尝试将步骤分开,如下所示:

ALTER TABLE dbo.projects ADD PercentageCompleted decimal(2,2) - 您还可以将其存储为varchar或char

declare @percentageVariable decimal(2,2)

select @percentageVariable = (select count(*) from projects where Project_finish > project_start) / (select count(*) from projects) - 需要按完成/总计得出比率

update projects
set PercentageCompleted = @percentageVariable

这将为您提供该表中的小数值,如果您希望%+ PercentageCompleted * 100

,您可以在select上格式化它