Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 添加使用其他列字段作为操作数(如加法和百分比计算)的列_Sql_Sql Server - Fatal编程技术网

Sql 添加使用其他列字段作为操作数(如加法和百分比计算)的列

Sql 添加使用其他列字段作为操作数(如加法和百分比计算)的列,sql,sql-server,Sql,Sql Server,这是我用来显示百分比的过程。 如果一个班级有100名学生,我想显示每个学生的百分比,那么动态计算年龄百分比并返回答案的SP将非常耗时。早些时候,我试图在tbl_标记本身中添加一列百分比。是否可以在存储过程中实现触发器,该过程在tbl_标记上调用“插入”或“更新”操作。实际上我从未用过扳机。如果你能用一个问题向我解释这个问题的解决方案,那就太好了。提前感谢。计算列可以使用表中其他列的数据来计算它所属列的值。此外,计算列是一个虚拟列,除非该列被标记为持久化,否则它不会物理存储在表中 因此,将表定义更

这是我用来显示百分比的过程。
如果一个班级有100名学生,我想显示每个学生的百分比,那么动态计算年龄百分比并返回答案的SP将非常耗时。早些时候,我试图在tbl_标记本身中添加一列百分比。是否可以在存储过程中实现触发器,该过程在tbl_标记上调用“插入”或“更新”操作。实际上我从未用过扳机。如果你能用一个问题向我解释这个问题的解决方案,那就太好了。提前感谢。

计算列可以使用表中其他列的数据来计算它所属列的值。此外,
计算列
是一个虚拟列,除非该列被标记为持久化,否则它不会物理存储在表中

因此,将表定义更改为:

ALTER PROCEDURE [dbo].[Sp_TotalMarks]
AS
BEGIN
    SELECT Student_Id, Stu_Name, Maths, English, Hindi,
           (Maths + English + Hindi) AS 'Total',
            CAST(CAST((Maths + English + Hindi) AS NUMERIC(8,2)) / 300 * 100 AS NUMERIC(8,2)) AS 'Percentage'
    FROM tbl_Marks

END
这将向表中添加两列,以反映每次更新或插入时的计算值


你可以查一下电话号码。希望这有帮助

表中的100行是一个非常小的数字,很难想象任何例行查询都会“耗时”。如果要优化查询,请编辑问题并将查询包含在编辑中。您可以在表tbl_Marks中添加一个标记为“持久”的计算列。。它应该可以解决这个问题。@GordonLinoff我不知道如何在这个网站上以正确的方式放置代码。我已经编辑了我的问题。@Deepshikha我没听懂你的意思。你能解释清楚一点吗。你的意思是我可以在我的表中添加这个cal列。我不想在需要查看详细信息时反复调用此过程。请立即检查。。希望这是服务的目的!!!是的,这就是我想要实现的。另外,我喜欢这个网站。非常感谢!
ALTER TABLE tbl_Marks ADD total AS (Maths + English + Hindi) PERSISTED;
ALTER TABLE tbl_Marks ADD Percentage AS CAST(CAST((Maths + English + Hindi) AS NUMERIC(8,2)) / 300 * 100 AS NUMERIC(8,2)) PERSISTED;