微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在sql server中使用select * with group by subquery

如何解决如何在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 举报,一经查实,本站将立刻删除。