[英]SQL- How can I exclude Groupings with a NULL value in the results
我正在尝试从结果中排除包含NULL值的分组。 我正在使用以下查询:
SELECT EmployeeID,AppointmentEndDate
FROM Appointment
WHERE EmployeeID IN
(SELECT EmployeeID
FROM Appointment
GROUP BY EmployeeID
HAVING COUNT(*) > 1 )
GROUP BY EmployeeID,AppointmentEndDate
ORDER BY EmployeeID
结果集如下所示:
EmployeeID AppointmentEndDate
1 NULL
1 2000-06-30 00:00:00.000
2 NULL
2 2006-06-30 00:00:00.000
2 2014-06-30 00:00:00.000
3 2006-07-02 00:00:00.000
3 2015-06-30 00:00:00.000
5 NULL
5 2001-12-31 00:00:00.000
5 2002-06-30 00:00:00.000
因此,在这种特定情况下,我只想查看EmployeeID 3的记录
非常感谢,A
您可以简化查询,以获取表中的约会日期从未为NULL的唯一employeeId
SELECT EmployeeID
FROM Appointment
WHERE AppointmentEndDate IS NOT NULL
GROUP BY EmployeeID
HAVING COUNT(*) > 1
或者,如果您不关心表中不为null的employeeId是否在表中出现多次,则可以使用distinct
SELECT DISTINCT EmployeeID
FROM Appointment
WHERE AppointmentEndDate IS NOT NULL
如果您希望获得employeeIds的最后约会日期,GROUP BY将帮助您使用聚合函数
SELECT EmployeeID , MAX(AppointmentEndDate) as LastDateOfAppointment
FROM Appointment
WHERE AppointmentEndDate IS NOT NULL
GROUP BY EmployeeID
HAVING COUNT(*) > 1
您可以尝试如下操作:
WITH CTE AS
(
YourQueryHere
)
SELECT *
FROM CTE
WHERE NOT EXISTS(SELECT 1 FROM CTE AS x WHERE x.EmployeeID=CTE.EmployeeID AND AppointmentEndDate IS NULL)
使用“ WHERE NOT EXISTS [Subselect]”(WHERE NOT EXISTS [Subselect])来筛选出具有一个或多个记录且AppointementEndDate为空的员工。 假设这是您要尝试执行的操作。
SELECT EmployeeID,AppointmentEndDate
FROM Appointment
WHERE NOT EXISTS(SELECT TOP 1 1
FROM Appointment AS A
WHERE Appointment.EmployeeID = A.EmployeeID
AND A.AppointmentEndDate IS NULL)
GROUP BY EmployeeID,AppointmentEndDate
ORDER BY EmployeeID
You Should Try This It's Working.....
SELECT EmployeeID,AppointmentEndDate
FROM Appointment
WHERE EmployeeID NOT IN
(SELECT EmployeeID
FROM Appointment
WHERE AppointmentEndDate IS NULL
GROUP BY EmployeeID
)
GROUP BY EmployeeID,AppointmentEndDate
ORDER BY EmployeeID
不知道GROUP BY提供什么值,但是我留给它是为了防止这是一个精简的示例。
Declare @Appointment table (EmployeeID int,AppointmentEndDate DateTime)
Insert Into @Appointment values
(1,NULL),
(1,'2000-06-30 00:00:00.000'),
(2,NULL),
(2,'2006-06-30 00:00:00.000'),
(2,'2014-06-30 00:00:00.000'),
(3,'2006-07-02 00:00:00.000'),
(3,'2015-06-30 00:00:00.000'),
(5,NULL),
(5,'2001-12-31 00:00:00.000'),
(5,'2002-06-30 00:00:00.000')
Select EmployeeID,AppointmentEndDate
From @Appointment
Where EmployeeID NOT IN (Select Distinct EmployeeID From @Appointment Where AppointmentEndDate Is NULL )
Group By EmployeeID,AppointmentEndDate
Order ByEmployeeID
退货
EmployeeID AppointmentEndDate
3 2006-07-02 00:00:00.000
3 2015-06-30 00:00:00.000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.