2014-04-21 86 views
1

我正在嘗試使用存儲過程爲百分比添加列。我得到了一個學生的總分的列,但百分比沒有被計算出來。我在名爲tbl_Marks的表中有不同的主題標記,然後我編寫了一個用於添加總列的存儲過程。如何使用存儲過程添加百分比列

這裏是我的代碼,該存儲過程:

ALTER PROCEDURE [dbo].[Sp_TotalMarks] 
AS 
BEGIN 
    DECLARE @t int 
    DECLARE @p int 

    SET @t = 300 
    SET @p = 100 

    SELECT 
     Student_Id, Stu_Name, Maths, English, Hindi, 
     (Maths + English + Hindi) AS 'Total', 
     ((Maths + English + Hindi)/@t)* @p AS 'Percentage' 
    FROM 
     tbl_Marks 
END 
+1

備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –

回答

1

試試這個:

ALTER PROCEDURE [dbo].[Sp_TotalMarks] 

AS 
BEGIN 
DECLARE @t numeric(8,2) 
DECLARE @p int 

SET @t = 300 
SET @p = 100 
SELECT 
Student_Id, 
Stu_Name, 
Maths, 
English, 
Hindi, 
(Maths + English + Hindi) AS 'Total', 
CAST(CAST((Maths + English + Hindi) AS NUMERIC(8,2))/@t * 100 AS NUMERIC(8,2)) AS 'Percentage' 

FROM tbl_Marks 
END 

如果你想堅持個結果,然後加在表中的新列,將被計算,添加一個公式檢查以保持結果以獲得更好的性能。

+0

我不知道關於sql中的CAST關鍵字。這真的很有幫助。 – SmokingMonkey

+0

有'CAST'和'CONVERT'轉換功能,它們是相似的,但有一些區別。稍後有可能添加第三個參數來輸出一些樣式 – veljasije

+0

如果班級中有100名學生,並且我想要顯示每個人的百分比,那麼這個SP將會很耗時。之前我試圖在tbl_Marks本身中添加一列百分比。是否可以在存儲過程中實現觸發器,該過程在tbl_Marks上的'INSERT'或'UPDATE'操作上調用。我從來沒有使用觸發器。如果你可以向我解釋這個問題的解決方案,這將是很好的。提前致謝。 – SmokingMonkey