2013-04-15 124 views
0

我試圖在SQL Server 2012點中快速添加自動計算領域,存儲項目完成的百分比%(SQL Server)的:,通過使用計算的時間差計算日期的

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. 

我在做什麼錯?

回答

0

即使有可能(這是不是),它是反正不是你想有一個計算值列:

  1. 這將是各行中的值相同
  2. 整個表都需要每次插入後進行更新/升級

你應該考慮在你的應用程序的業務邏輯在stored procedure或用戶defined function instead.Or這樣更好,

0

我認爲你不能這樣做。你可以編寫一個觸發器來找出它,或者將它作爲更新語句的一部分。

+0

你可以通過使用一些函數來獲得SQLDataSource來計算它,而不是創建另一列嗎? – Brian

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