2014-12-22 48 views
0

是否有可能爲計算列規範或公式添加使用SELECT查詢?我想用這個查詢:通過創建一個新列,並添加公式SQL列表公式

ALTER TABLE HCCDB.dbo.SubjectOfferedFee 
    ADD FinalCost AS [THE QUERY SELECT QUERY ABOVE] 

我已經試過這對其它列,通過連接列:

SELECT IIF([Name] = 'Tuition' 
      , CONVERT([DECIMAL](15,2),Cost * t1.SubjectUnit) 
      , CONVERT([DECIMAL](15,2),Cost) 
     ) as FinalCost 
FROM [HCCDB].[dbo].[SubjectOfferedFee] AS t0 
     INNER JOIN HCCDB.dbo.SubjectsOffered AS t1 
      ON t1.SubjectsOfferedID = t0.SubjectsOfferedID 

在ALTER TABLE語句。

CONVERT([varchar](50),[FirstName]) 
    + ' ' + CONVERT([varchar](50),[MiddleName]) 
    + ' ' + CONVERT([varchar](4),[LastName]) 

它的工作原理,但如何增加一個SELECT查詢?

+0

不能在與定義派生值的位置相同的字段列表中的其他地方使用派生值。您必須使用子查詢進行計算,那麼您可以使用派生值,就好像它始終存在於包含/包裝查詢中的查詢中一樣。 –

+1

如果不進行測試/檢查,我認爲如果將查詢封裝在用戶定義的函數中,則可以在計算列規範中使用該函數。 –

回答

0

只需在您當前的上下文中創建一個用戶定義函數即可。

CREATE FUNCTION dbo.fnGetSubjectCost(@id INT) 
RETURNS DECIMAL 
AS 
-- Returns cost if the subject that if particular name is equal to Tuition then cost x unit. 
BEGIN 
DECLARE @ret DECIMAL; 

SELECT @ret = IIF([Name] = 'Tuition', CONVERT([DECIMAL](15,2),Cost * t1.SubjectUnit), CONVERT([DECIMAL](15,2),Cost)) 
    FROM [HCCDB].[dbo].[SubjectOfferedFee] AS t0 
     INNER JOIN HCCDB.dbo.SubjectsOffered AS t1 
      ON t1.SubjectsOfferedID = t0.SubjectsOfferedID 
      WHERE t0.SubjectOfferedFeeID = @id 
IF (@ret IS NULL) 
SET @ret = 0; 
RETURN @ret; 
END; 
GO 

然後你就可以使用這個功能來計算列規範或

ALTER TABLE HCCDB.dbo.SubjectOfferedFee 
ADD FinalCost AS CONVERT(DECIMAL(15,2), dbo.fnGetSubjectCost(CONVERT(INT, [SubjectOfferedFeeID]))) 

然後解決。