Sql 消除distinct select语句中的空记录

Sql 消除distinct select语句中的空记录,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,在SQLServer2008中 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

在SQLServer2008中

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 

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

其中columnName不为null,columnName2不为null
到查询结束。

试试这个

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

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

听起来您想要的是一个结果表,其中包含每个员工的行或元组(关系数据库没有记录),其中有一个
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
master
虚拟表提供了一组目标员工;
详细信息
为员工提供非空的工作日期。
left join
提供了从
master
detail
的所有匹配项


master
中的行在
details
中没有匹配的行,将返回一次,并将
details
中的贡献列设置为
null
master
中的行以及
detail
中的匹配行对于每个此类匹配重复一次,
detail
列反映匹配行的值。

这将为每个empid提供最低日期或空值

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

第一个和第二个没有区别。对于最后一个
where date not null
应该是dob,但是您的查询中没有包含
Cmpid
,那么结果a)如何返回3个不同的行,以及b)如何包含列
Cmpid
?你能用文字准确地描述你想要达到的目标吗?如果empid2的所有记录的日期字段都是空的,那么我需要一个记录:在我的输出中为空,我明白了。。。因此,每个条目所需的数据可能分布在3个或更多记录上,您试图找到一种方法来返回它,而无需查询所有内容并获取大量空值。我可能有办法,但需要时间。同时,我建议编辑你最初的问题;这让我有点困惑。哦,对不起!!。。我刚刚编辑了一点数据集,这正是所需要的。如果empid2的所有记录的日期字段都为空,那么我需要一个记录:在我的输出中为空。