2015-06-16 139 views
-1

消除NULL记录在SQL Server 2008在不同的SELECT语句

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 

我需要填充表温度:

insert into temp 
select distinct empid,date from employee 

这给所有 3条记录,因为它们是不同的,但我需要什么 是

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

2第一是不显着。对于最后一个'日期不为空'应该做 – njzk2

+0

但是你没有在你的查询中包含'Cmpid',那么结果a)如何返回3个不同的行,并且b)有'CMPID'列?你能用文字描述你想要达到的目标吗? – DuncanKinnear

回答

0

根据大小和范围o在您的表格中,将

WHERE columnName is not null AND columnName2 is not null添加到您的查询结尾可能会更加谨慎。

+0

如果empid 2的所有记录的日期字段为NULL,那么我需要一条记录:2在我的输出中为NULL –

+0

哦,我明白了......因此,每个条目所需的数据可能分布在3个或更多记录中,你试图找到一种方法来返回它,而不是查询所有内容并得到一堆空值。我可能有一个解决办法,但这需要时间。在此期间,我建议编辑你最初的问题;对我来说有点混乱。 – TRose

+0

哎呀对不起!!我刚刚编辑了数据集的一个位,这是确切需要的 –

-1

试试这个

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

如果empid 2的所有记录的日期字段为NULL,那么我需要一个记录:2在我的输出NULL。 –

0

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

0

这听起来像你想要的是含有元组(关系数据库没有记录),用于与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虚拟表为您提供了一套destinct员工; detail为员工提供他们工作的非空日期。该left join为您提供了从detail所混合的任何匹配一切从master

行中master没有匹配的行中details,与促进列被返回一旦从detail设置为null。在detail中匹配行的master行对于每次匹配都会重复一次,而detail列会反映匹配行的值。

0

这会给你最低的日期或空每个EMPID

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