2015-06-16 69 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