sql - 如何从 SQL 查询中删除重复行
问题描述
这是我的查询:
SELECT TOP (100) PERCENT
dbo.PMAPS.PMAP_Employee_NED_ID,
dbo.Employees.First_Name,
dbo.Employees.Last_Name,
dbo.Employees.DeptID,
dbo.Employees.Barg_Unit,
dbo.Employees.Pay_Plan,
dbo.Employees.Grade, dbo.Employees.Last_Name + ', ' + dbo.Employees.First_Name AS Full_Name,
dbo.FDA_Centers.Center_Acronym,
MAX(dbo.PMAPS.PMAP_Establishment_Rating_Official_Signed) AS PMAP_Establishment_Rating_Official_Signed,
dbo.PMAPS.PMAP_MidYear_Rating_Official_Signed,
dbo.Employees.center_ID,
dbo.Employees.office_id,
dbo.PMAPS.PMAP_MidYear_Estimated_completion_Date,
dbo.PMAPS.PMAP_MidYear_Estimated_completion_Reason,
dbo.PMAPS.PMAP_Below_Level_Three,
dbo.PMAPS.PMAP_Contact_LER
FROM dbo.PMAPS
INNER JOIN dbo.Employees ON dbo.PMAPS.PMAP_Employee_NED_ID = dbo.Employees.CapHR_ID
INNER JOIN dbo.FDA_Centers ON dbo.Employees.center_ID = dbo.FDA_Centers.Center_ID
GROUP BY dbo.PMAPS.PMAP_Employee_NED_ID,
dbo.PMAPS.PMAP_Year
dbo.PMAPS.PMAP_IsActive
dbo.PMAPS.PMAP_MidYear_Estimated_completion_Date
dbo.PMAPS.PMAP_Below_Level_Three
dbo.Employees.center_ID
dbo.Employees.isCommissionedCorps
dbo.Employees.isExecutive
dbo.Employees.Pay_Plan
dbo.PMAPS.PMAP_Establishment_Rating_Official_Signed
dbo.FDA_Centers.Center_Acronym
dbo.Employees.First_Name
dbo.Employees.Last_Name
dbo.Employees.DeptID
dbo.Employees.Barg_Unit
dbo.Employees.Pay_Plan
dbo.Employees.Grade
dbo.Employees.center_ID
dbo.Employees.office_id
dbo.PMAPS.PMAP_MidYear_Rating_Official_Signed
dbo.PMAPS.PMAP_MidYear_Estimated_completion_Reason
dbo.PMAPS.PMAP_Contact_LER
HAVING (dbo.PMAPS.PMAP_IsActive = 1)
AND (dbo.Employees.isCommissionedCorps = 0)
AND (dbo.Employees.isExecutive = 0)
AND (NOT (dbo.Employees.Pay_Plan LIKE 'E%')
AND NOT (dbo.Employees.Pay_Plan LIKE 'Z%')
AND NOT (dbo.Employees.Pay_Plan LIKE 'S%')
OR dbo.Employees.Pay_Plan IS NULL)
AND (dbo.PMAPS.PMAP_MidYear_Estimated_completion_Date IS NULL)
AND (dbo.PMAPS.PMAP_Establishment_Rating_Official_Signed IS NOT NULL)
AND (dbo.Employees.center_ID = 14)
AND (dbo.PMAPS.PMAP_Year = 2020)
AND (dbo.PMAPS.PMAP_MidYear_Rating_Official_Signed IS NULL)
ORDER BY dbo.PMAPS.PMAP_Employee_NED_ID;
结果:
然后突出显示的数据行是我需要显示的行。我试过 MAX() (在上面的查询中),不同的,似乎没有任何效果。请指教。提前致谢。
解决方案
我认为你只需要修复你的GROUP BY
:
SELECT ID, First_Name, Last_Name, MAX(Date1) AS Date1, Date2
FROM dbo.vw_getActiveEmployees ae LEFT JOIN
dbo.vw_active_Employees_with_PMAPs ewp
ON emp.CapHR_ID = ae.CapHR_ID LEFT JOIN
dbo.vw_active_Employees_with_MidYear_PMAPs emp
ON emp.CapHR_ID = ewp.CapHR_ID
GROUP BY ID,First_Name, Last_Name, Date2;
请注意,表别名使查询更易于阅读。我也更喜欢LEFT JOIN
,RIGHT JOIN
因为它说将所有内容保留在第一个表中(不是尚未阅读的最后一个表)。
推荐阅读
- linux - 页面错误处理程序可以生成更多页面错误吗?
- angular - 断开前一个套接字连接并建立一个新连接
- python - 如何在 Tensorflow 框架中使用 L2-Loss 函数进行目标检测 CNN?
- swift - 如何使用 FCM 修复推送通知中的声音相关问题
- machine-learning - 如何对数百个类和每个类中样本量较少的文本数据进行分类
- javascript - 如何使用 Ajax 在 WordPress 中添加分页(我有代码需要调试)?
- php - 对数组进行分组并按相同的键值分配唯一编号
- php - ApiTestCase 类请求函数返回“函数名必须是字符串”错误
- python - 如何在更新后获取区间树上的最大交叉点并获取它发生的区间?
- asp.net-web-api - Azure 管道 XML 转换选项
多变的?