2012-02-07 47 views
1

我無法刪除/查找重複時,在某列的值包含空值的Microsoft Access廣東話刪除包含Null值

這是我原來的標準

In (SELECT [PQT] FROM [Departure] As Tmp GROUP BY [PQT],[IDNUSER],[Name] 
    HAVING Count(*)>1 And [IDNUSER] = [Departure].[IDNUSER] And [Name] = [Departure].[Name]) 

例如重複,讓說名稱將是可能包含空值的列,

我試着用

And IIf(IsNull([Name]), " ", [Name]) = IIf(IsNull([Departure].[Name]), " ", 
[Departure].[Name]) 
替換它

它似乎沒有工作。 我使用NZ也試過,沒有成功

這裏是我的表將包含例如DATAS我當前查詢 的

**PQT**  **IDNUSER**  **Name** 
BNC   001    Bob 
BNC   001    Bob 
BNC   002    
BNC   002    

結果與IDNUSER 001 2個第一個數據被認爲是由於重複所有字段都有值。 但由於Name中的值爲null,因此不會將IDNUSER 002視爲重複項。 我想我的查詢找到所有重複項。

+1

那IIf語句沒有意義,請問您能簡化您的問題(並確定SQL)嗎?另外,即使這個SQL運行起來,如果它在不到10年的時間裏運行,我也會感到驚訝,我想我們需要看看從一開始就精簡這個SQL:) – 2012-02-07 15:43:53

+0

對不起,我修改了我的問題並試圖使事情更清楚。我希望這是更好的。謝謝 – GIBIT 2012-02-07 20:38:11

+0

只是一個建議的話,你提到與空工作,但Access將「空」和「空白」視爲不同的事情(我知道怪異),所以保證捕獲的最佳方式是使用IIf([Name]&「」= 「」,TrueValue,FalseValue) – 2012-02-08 11:16:00

回答

3

將您的樣本數據用於出發表,這是來自以下SELECT查詢的輸出。

PQT IDNUSER user_name num_matches 
BNC 001  Bob     2 
BNC 002       2 

SELECT 
    d.PQT, 
    d.IDNUSER, 
    Nz([Name]," ") AS user_name, 
    Count(*) AS num_matches 
FROM Departure AS d 
GROUP BY 
    d.PQT, 
    d.IDNUSER, 
    Nz([Name]," "); 

但是你的問題中提到刪除重複,所以我不知道還有什麼在這一點上做的。我沒有看到你如何區分2個Bob行......哪個放棄哪個行,哪個行。如果我們有一個唯一的列(如主鍵)來區分它們,那將是可能的。或者,您可以將來自此GROUP BY查詢的輸出存儲到Access UI調用「附加查詢」的另一個表中。這種查詢的模式類似於:

INSERT INTO OtherTable (
    PQT, 
    IDNUSER, 
    user_name, 
    num_matches 
    ) 
SELECT 
    d.PQT, 
    d.IDNUSER, 
    Nz([Name]," ") AS user_name, 
    Count(*) AS num_matches 
FROM Departure AS d 
GROUP BY 
    d.PQT, 
    d.IDNUSER, 
    Nz([Name]," "); 

另請注意,我將IDNUSER = 002的兩行合併爲一行。這是我最好的猜測,你想要什麼。不過,我的傾向是要求名稱欄中的值 - 換句話說,禁止空值。但是,如果您需要允許空值並希望以不同方式處理,請告訴我們您想要什麼。

編輯:再看一遍,我看不到真正需要NZ()函數。即使組中的[Name]包含Null,該版本也會正確計數匹配項。

SELECT 
    d.PQT, 
    d.IDNUSER, 
    [Name] AS user_name, 
    Count(*) AS num_matches 
FROM Departure AS d 
GROUP BY 
    d.PQT, 
    d.IDNUSER, 
    [Name]; 
+0

謝謝,它似乎已經工作:) – GIBIT 2012-02-08 14:05:33