如何解决如何在sql server中使用select * with group by subquery
我有带有列的员工工资明细记录表
Id Name Year Month Salary
1 ABC 2021 Jan 50000
2 PQR 2021 Jan 40000
3 KLM 2021 Feb 45000
4 LMN 2021 Jan 55000
5 LMN 2022 Jan 20000
6 ABC 2022 Feb 25000
7 ABC 2022 Jan 2500
8 ABC 2022 Dec 60000
9 LMN 2022 Nov 70000
现在我想找出哪位员工加入时薪水大于100000,并显示员工所有数据
--找出目前工资超过100000的员工
select name,sum(salary) as AnnualSalary from tblEmpsalary
group by Name
having sum(Salary)>100000 --this query works
--但是下面的查询不显示数据,(我想显示总工资超过100000的员工的所有数据)
SELECT id,name,Month,Year,SUM(Salary) AS TotalSales
FROM tblEmpsalary
GROUP BY name,Id,Salary
having SUM(Salary)>100000;
解决方法
SELECT T.ID,T.Name,T.Year,T.Month,T.Salary
FROM tblEmpsalary AS T
JOIN
(
select ID
from tblEmpsalary
group by ID
having sum(Salary)>100000
)AS X ON T.ID=X.ID
,
您可以为此使用窗口函数
SELECT
id,name,Month,Year,TotalSales
FROM (
SELECT *,SUM(Salary) OVER (PARTITION BY name) AS TotalSales
FROM tblEmpsalary e
) e
WHERE e.TotalSales > 100000;
,
请尝试使用以下查询,其中一个查询用于分组,另一个查询用于获取员工详细信息:
SELECT TS.id,TS.name,TS.Month,TS.Salary,ATS.TotalSales FROM
(SELECT Month,SUM(Salary) AS TotalSales
FROM tblEmpsalary
GROUP BY Month,Salary
HAVING SUM(Salary)>100000
) AS ATS
LEFT OUTER JOIN tblEmpsalary TS on ATS.Month = TS.Month and ATS.Year = TS.Year
ORDER BY TS.name,TS.Id,TS.Year,ATS.TotalSales
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。