-3

my query used to report monthly salary so when choose month from 1 - 2021 to 8 - 2021 it report like this i want to get same result for each badgenumber in one row for all choosen months I have the following query that collect data from multiple table

SELECT
    dbo.USERINFO.BADGENUMBER ,
    dbo.Emp_OV_LT.Overtime ,
    dbo.Emp_OV_LT.Absent , 
    (dbo.Emp_OV_LT.Late + dbo.Emp_OV_LT.Early) , 
    ROUND((dbo.Salaries.B_S), 3),
    ROUND((dbo.Salaries.T_A + dbo.Salaries.W_A + dbo.Salaries.L_A + dbo.Salaries.C_A), 3) ,
    ROUND( dbo.Salaries.Overtime, 3),
    ROUND(dbo.Salaries.Absent, 3),
    ROUND( dbo.Salaries.Late_Deduction,3) , 
    ROUND(dbo.Salaries.Total_Salary,3), 
    dbo.Salaries.SSN ,
    ROUND(dbo.Salaries.n_salary,3) 
FROM 
    dbo.USERINFO 
INNER JOIN 
    dbo.Salaries ON dbo.USERINFO.USERID = dbo.Salaries.User_ID 
INNER JOIN 
    dbo.Emp_Salary ON dbo.USERINFO.USERID = dbo.Emp_Salary.Emp_ID
INNER JOIN 
    dbo.Emp_OV_LT ON dbo.Emp_OV_LT.Emp_ID = dbo.USERINFO.USERID 
WHERE
    dbo.Salaries.Month = dbo.Emp_OV_LT.Month 
    AND dbo.Salaries.Month BETWEEN '1 - 2021' AND '8 - 2021' 
    AND dbo.Emp_OV_LT.year = '2021' 
    AND dbo.Salaries.ssn > 1 
ORDER BY
    dbo.userinfo.ssn,
    dbo.Emp_OV_LT.Month

USERINFO.BADGENUMBER 我想根据更改月份标准超过一个月后的重复时间来汇总所有选定的列

4

1 回答 1

0

my query used to report monthly salary so when choose month from 1 - 2021 to 1 - 2021 it report like this Ok, I am going to take a stab at this, with what I believe you are trying to accomplish. 我一直在盯着你的帖子看了一段时间,并做出了一些假设。

你说

我想总结所有选定的列

起初我以为您想对 SELECT 子句中包含的所有列求和,但这没有意义。所以我假设你想选择你求和的列。因此,假设您要对每个 dbo.USERINFO.BADGENUMBER 的每个月/年求和 dbo.Emp_OV_LT.Overtime OVER。我相信你会做这样的事情。

WITH CTE AS
(
    SELECT
dbo.USERINFO.BADGENUMBER ,
dbo.Emp_OV_LT.Overtime ,
dbo.Emp_OV_LT.Absent , 
(dbo.Emp_OV_LT.Late + dbo.Emp_OV_LT.Early) , 
ROUND((dbo.Salaries.B_S), 3),
ROUND((dbo.Salaries.T_A + dbo.Salaries.W_A + dbo.Salaries.L_A + 
dbo.Salaries.C_A), 3) ,
ROUND( dbo.Salaries.Overtime, 3),
ROUND(dbo.Salaries.Absent, 3),
ROUND( dbo.Salaries.Late_Deduction,3) , 
ROUND(dbo.Salaries.Total_Salary,3), 
dbo.Salaries.SSN ,
ROUND(dbo.Salaries.n_salary,3) ,
dbo.Salaries.Month,
dbo.Emp_OV_LT.year
FROM 
dbo.USERINFO 
INNER JOIN 
dbo.Salaries ON dbo.USERINFO.USERID = dbo.Salaries.User_ID 
INNER JOIN 
dbo.Emp_Salary ON dbo.USERINFO.USERID = dbo.Emp_Salary.Emp_ID
INNER JOIN 
dbo.Emp_OV_LT ON dbo.Emp_OV_LT.Emp_ID = dbo.USERINFO.USERID 
WHERE
dbo.Salaries.Month = dbo.Emp_OV_LT.Month     
AND dbo.Salaries.ssn > 1 
ORDER BY
dbo.userinfo.ssn,
dbo.Emp_OV_LT.Month
)

SELECT DISTINCT *,
SUM(Overtime) OVER (PARTITION BY [Month], 
BADGENUMBER]) AS SUM_OF_OverTime
FROM CTE
WHERE [Month] BETWEEN '1 - 2021' AND '8 - 2021' AND [year] = '2021' 

在无法访问数据库和表或一些示例数据的情况下,这是我能想到的最好的方法。

编辑,您必须添加dbo.Salaries.Month到原始SELECT文件,因为您按该字段进行分区。此外,您应该将该字段dbo.Emp_OV_LT.year移至您的,并且您应该在您的子句SELECT中使用该字段。WHERE

于 2021-09-26T22:17:04.163 回答