2016-09-08 57 views
1

我想从表中获取select并根据列的值返回行。以下是数据和期望的输出。如果列EmpRecord有多个值不为null将返回,如果它只有null,那么它应该返回。如何获得低于SQL输出

Data Table 

EmployeeNo     EmpRecord 
1       A 
1       NULL 
2       a 
3       NULL 
4       NULL 
4       A 
4       aa 




Output 
EmployeeNo     EmpRecord 
1       A 
2       a 
3       NULL 
4       A 
4       aa 

有关如何继续使用它的任何建议将是伟大的?

问候, 西特

+0

您可能希望使用与'EXISTS'相关的子查询。 –

回答

1

UNION查询的下面的第一个半简单地剥掉记录的量,EmpRecordNULL。这几乎得到的工作完成,除了只有多一个NULL记录的员工,这也会从结果集中删除它们。因此,UNION的第二部分将这些员工作为单一记录添加到他们的员工编号和NULL占位符中作为记录。

SELECT t1.EmployeeNo, 
     t1.EmpRecord 
FROM yourTable t1 
WHERE t1.EmpRecord IS NOT NULL 
UNION ALL 
SELECT t2.EmployeeNo, 
     NULL AS EmpRecord 
FROM yourTable t2. 
GROUP BY t2.EmployeeNo 
HAVING SUM(CASE WHEN t2.EmpRecord IS NULL THEN 1 ELSE 0 END) = COUNT(*) 
+0

谢谢效果不错 – Sid

+0

@Sid请再次尝试查询。 –