消除distinct select语句中的NULL记录

时间:2015-06-16 19:14:11

标签: sql sql-server sql-server-2008

在SQL SERVER 2008中

Relation : Employee

empid   clock-in  clock-out  date      Cmpid
1        10        11      17-06-2015   001
1        11        12      17-06-2015   NULL 
1        12         1      NULL         001 
2        10        11      NULL         002
2        11        12      NULL         002

我需要填充表temp:

insert into temp
select distinct empid,date from employee

这给了所有人 3个记录,因为它们是截然不同的但是什 我需要的是

empid  date          CMPID
1      17-06-2015     001
2      NULL           002 

5 个答案:

答案 0 :(得分:0)

根据表格的大小和范围,添加

可能更为谨慎

WHERE columnName is not null AND columnName2 is not null到查询结尾。

答案 1 :(得分:0)

Null与其他日期值不同。如果你不排除空记录,你必须添加一个条件,如table.filed不为null。

答案 2 :(得分:0)

听起来你想要的是一个包含元组(关系数据库没有记录)的结果表,每个员工都有{{1} }列显示工作日期或date如果它们不起作用。正确?

这样的事情应该对你有用:

null

select e.employee_id from ( select distinct empid from employee ) master left join employee detail on detail.empid = master.empid and detail.date is not null 虚拟表为您提供了一组destinct员工; master为员工提供他们工作的非空日期。 detailleft join提供了来自master的所有匹配内容的所有内容。

detail中没有匹配行的master中的行返回一次,其中details的贡献列设置为detailnull中具有匹配行的master中的行会针对每次匹配重复一次,detail列会反映匹配行的值。

答案 3 :(得分:0)

这将为您提供每个empid的最低日期或null

SELECT  empid, 
        MIN(date) date, 
        MIN(cmpid) cmpid
FROM    employee
GROUP BY empid

答案 4 :(得分:-1)

试试这个

      select distinct empid,date from employee where date is not null