计算日期的百分比(SQL Server)



我试图在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.

我做错了什么?

即使它是可能的(它不是),它也不是您想要作为计算列的东西:

  1. 每一行都是相同的值
  2. 整个表需要在每次插入/更新
  3. 之后更新。

您应该考虑在stored procedure或用户defined function中执行此操作。或者在应用程序的业务逻辑中更好,

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

您是否将"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

这将给你一个十进制值,然后你可以在select上格式化它,如果你想% + PercentageCompleted * 100

最新更新