如何获得低于SQL输出

时间:2016-09-08 01:06:55

标签: tsql

我试图从表中选择并根据列的值返回行。下面是数据和所需的输出。如果列EmpRecord有多个值不返回null,如果它只有null,则应该返回它。

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

关于如何继续进行的建议会很棒吗?

此致 SID

1 个答案:

答案 0 :(得分: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(*)