无法将计算应用于SQL Server中的所有行
我在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
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名员工。我刚刚更新了一些图片,你能检查一下吗?为什么要用光标进行这个简单的查询?我刚才提到了一种将行保存到变量的方法(在本例中是光标)。谢谢,我现在明白了我的第二种方法的错误。我认为我的第一种方法是完成这项任务最简单的方法。