在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
答案 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
为员工提供他们工作的非空日期。 detail
为left join
提供了来自master
的所有匹配内容的所有内容。
detail
中没有匹配行的master
中的行返回一次,其中details
的贡献列设置为detail
。 null
中具有匹配行的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