首页 > 解决方案 > SQL查询emp表中的工资

问题描述

我有一张员工表。我想知道具体的年度工资,或者今年是 2019 年,我想知道我在 2018 年向员工支付了多少工资(单个或全部员工)。那么如何编写查询。

标签: sql

解决方案


你必须得到一年工作的百分比,然后乘以薪水。如果joined_date 早于当年1 月,请使用“1.00”。

由于您没有指定 SQL 类型,因此我选择了我最熟悉的 MSSQL。

下面是一个使用 MSSQL 的示例:

DECLARE @yearToFindSalaryFor INT = 2018
DECLARE @dateEndOfSalaryYear DATE = ('01/01/' + 
                                     CONVERT(VARCHAR(5), (@yearToFindSalaryFor + 1)))
DECLARE @dateStartOfSalaryYear DATE = ('01/01/' + 
                                     CONVERT(VARCHAR(5), (@yearToFindSalaryFor)))

SELECT E1.YEARS_WORKED_FOR_YEAR, 
E2.sal * E1.YEARS_WORKED_FOR_YEAR AS SALARY_FOR_YEAR, E1.eid
FROM 
(
   SELECT 
   CASE WHEN joining_date > @dateEndOfSalaryYear
   THEN 0
   WHEN joining_date < @dateStartOfSalaryYear THEN 1
   -- cast one of the numbers as decimal, otherwise MSSQL will spit out an int value (1 or 0)
   -- since DATEDIFF will give INT value not decimal, we have to get 'days' and divide by 365
   ELSE DATEDIFF(day, joining_date, @dateEndOfSalaryYear)
       / CAST(365 AS DECIMAL(4, 0))
   END
   AS YEARS_WORKED_FOR_YEAR, eid FROM Employees
  ) AS E1
    JOIN Employees E2 ON E1.eid = E2.eid

小提琴示例:http ://sqlfiddle.com/#!18/26485/34


推荐阅读