sql - 无法对 SQL Server 中的所有行应用计算

标签 sql sql-server t-sql

我在 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 表中的第一个工资,然后将结果复制到其他行中。你能帮我找到将计算应用于表中所有行的方法吗?

预期结果

Expected result

错误

Error

员工表

Staff table

最佳答案

原因

@annualSalary 有一个固定值它不是一个函数

这一行将为变量分配一个值:

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

在第二个命令中,您选择一个分配给@annualSalary变量的固定值,并且在选择查询中的每一行重复该值

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]

关于sql - 无法对 SQL Server 中的所有行应用计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48607383/

相关文章:

php - Mysql全文帮助

java - SQL插入新创建的列,数据放置在前一列的最后一行之后

sql-server - NodeJS-根据Stream从SQL Server导出

xml - 从 Sql Server 列中的 XML 中提取数据

sql - 比较表中的列值计数

sql-server - 确定数据库是 Sybase 或 SQL Server

SQL - 获得最大结果

mysql - 使用 WHERE 和 GroupBy 在子查询 SELECT 语句中计数

php - 通过 SSL 通过 PHP PDO 连接到 MSSQL 服务器

javascript - 连接 JavaScript 和 Ms Sql