繁体   English   中英

SQL-如何在结果中排​​除具有NULL值的分组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM