Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 Server中的所有行_Sql_Sql Server_Tsql - Fatal编程技术网

无法将计算应用于SQL Server中的所有行

无法将计算应用于SQL Server中的所有行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在SQL Server中有一个Staff表,其中有一个Salary列,我的目标是计算每月金额,然后显示它。我想出了两种方法来完成这项任务,但第二种方法不起作用 这是我的密码: 第一种方法 SELECT FirstName, FamilyName, CAST(Salary / 12 AS DECIMAL(8,2)) AS AnnualSalary FROM [dbo].[Staff] 第二种方法 DECLARE @monthlySalary DECIMAL(8

我在SQL Server中有一个
Staff
表,其中有一个
Salary
列,我的目标是计算每月金额,然后显示它。我想出了两种方法来完成这项任务,但第二种方法不起作用

这是我的密码:

第一种方法

SELECT 
    FirstName, FamilyName, 
    CAST(Salary / 12 AS DECIMAL(8,2)) AS AnnualSalary 
FROM  
    [dbo].[Staff]
第二种方法

DECLARE @monthlySalary DECIMAL(8,2)

SELECT @monthlySalary = CAST(Salary / 12 AS DECIMAL(8, 2)) 
FROM [dbo].[Staff]

SELECT @monthlySalary AS MonthlySalary  
FROM [dbo].[Staff]
在第二种方法中,它只计算Staff表中的第一个薪资,然后将结果复制到其他行中。您能帮我找到将计算应用于表中所有行的方法吗

预期结果

错误

职员表


第二种方法是声明decimal类型的变量,该变量一次只能存储一个数字。 因此,当您执行第一个查询时,变量将一个数字存储为其值(我假设它是您提到的第一个薪资值),然后在执行第二个查询时,您将返回相同的值,即staff表中的记录数。 如果您想要存储薪资的所有值,那么您可能必须使用游标……但是查询将与第一个示例中的相同。 差不多

DECLARE staff_cursor CURSOR  
    FOR SELECT FirstName, FamilyName, cast(Salary/12 as DECIMAL(8,2)) as AnnualSalary FROM  [dbo].[Staff]
OPEN staff_cursor  
FETCH NEXT FROM staff_cursor; 
原因
@annualSalary
有一个固定值它不是一个函数

此行将为变量指定一个值:

SELECT @annualSalary  = CAST(Salary/12 as DECIMAL(8,2)) 
FROM [dbo].[Staff]
在第二个命令中,您选择一个固定值,该值被分配给
@annualSalary
变量,并在Select查询中对每一行重复该值

SELECT @annualSalary AS AnnualSalary  
FROM [dbo].[Staff]
更多信息请访问


建议 如果目标是计算你应该使用的所有工资的平均值

SELECT AVG(CAST(Salary / 12 AS DECIMAL(8, 2)))  
FROM [dbo].[Staff]
SELECT CAST(Salary / 12 AS DECIMAL(8, 2)) 
FROM [dbo].[Staff]
否则你应该使用

SELECT AVG(CAST(Salary / 12 AS DECIMAL(8, 2)))  
FROM [dbo].[Staff]
SELECT CAST(Salary / 12 AS DECIMAL(8, 2)) 
FROM [dbo].[Staff]

旁注:
工资
除以
12
不是从年薪中按月计算出来的吗?请添加示例数据和预期结果。我检查了您的方法,它可以工作,但只返回1名员工。我刚刚更新了一些图片,你能检查一下吗?为什么要用光标进行这个简单的查询?我刚才提到了一种将行保存到变量的方法(在本例中是光标)。谢谢,我现在明白了我的第二种方法的错误。我认为我的第一种方法是完成这项任务最简单的方法。