【问题标题】:Calculating the percentage of dates (SQL Server)计算日期百分比 (SQL Server)
【发布时间】:2013-04-15 18:36:49
【问题描述】:

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

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你可以通过使用一些函数而不是创建另一个列来获得一个 SQLDataSource 来计算它吗?
      【解决方案3】:

      您是否将“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,您可以在选择时对其进行格式化

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-16
        • 1970-01-01
        • 2020-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多