2016-07-22 218 views
-1

不同的結果,我有這樣的:集團通過給出SQL

SELECT ([Document No_]) 
FROM [Verploegen POC$Sales Line] 
--WHERE [Shipment Date] = '2014-05-08' 
GROUP BY [Document No_] 
--[Shipment Date] 
--[Document No_], 
HAVING COUNT(*) > 1 

,給我272160個返回結果。

,但如果我這樣做:

SELECT ([Document No_]), [Shipment Date] 
FROM [Verploegen POC$Sales Line] 
--WHERE [Shipment Date] = '2014-05-08' 
GROUP BY [Document No_], [Shipment Date] 
--[Shipment Date] 
--[Document No_], 
HAVING COUNT(*) > 1 

返回:267661.

怎麼可能?

謝謝

如果我這樣做:

SELECT ([Document No_]), [Shipment Date] 
FROM [Verploegen POC$Sales Line] 
WHERE [Shipment Date] = '2012-01-01' 

我得到36個返回結果。但有雙打,像這樣:

V004180 2012-01-01 00:00:00.000 
V004182 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 
V066594 2012-01-01 00:00:00.000 

所以我試圖剔除有雙打的雙打。但是,在這種情況下,如何返回帶有標題的樹結果(即唯一值):文檔No_和裝運日期?

謝謝

如果我這樣做:

SELECT ( [Document No_]), [Shipment Date], COUNT(*) as count 
FROM [Verploegen POC$Sales Line] 
WHERE [Shipment Date] = '2012-01-01' 
GROUP BY [Document No_], [Shipment Date] 


SELECT ( [Document No_]), COUNT(*) as count 
FROM [Verploegen POC$Sales Line] 
WHERE [Shipment Date] = '2012-01-01' 
GROUP BY [Document No_] 

它會返回完全相同的結果

+2

erm ...因爲它們是不同的查詢?! – Tanner

+0

但我只是添加爲標題出貨日期。所以我想顯示文件No_和裝運日期。 –

+0

好吧,我們不知道你的數據是什麼樣的,但是如果你有不同的分組和額外的列,你很可能會看到不同數量的結果。 – Tanner

回答

1

權!

您正在執行兩個不同的查詢。

通過僅對Document_No,通過爲兩個字段,Document_No和裝運日期

一個例子,第二組的第一個基。

假設你有這樣的DATAS:

Document No | Shipment Date 
    1  | 2015-01-01 
    2  | 2015-01-01 
    1  | 2016-01-01 

第一個查詢返回2行(按文件編號,因此第一和第三行collpased和第二行)

第二查詢返回3個ROWS(由Docvument No和Shipment Date組成的組是三種不同的組合)。

一個有趣的問題是...如何在你的表中有更多的行爲相同的文件號?爲什麼您對同一個文件號有不同的裝運日期?

1

你有兩個不同的查詢,所以兩個不同的結果集不應該是一個驚喜。在一個非常簡單的例子:

原始數據:

Document No | Shipment Date 
----------------------------- 
    1  | 2016-07-22 
    1  | 2016-07-23 
    2  | 2016-07-22 

如果你做一個計數只是Document No分組,你會得到:

SELECT [Document No], COUNT(*) AS Count 
FROM T 
GROUP BY [Document No]; 

Document No | Count 
----------------------------- 
    1  | 2 
    2  | 1 

因此應用HAVING COUNT(*) > 1後,你只會留下與Document No是1的記錄。

如果添加供貨日期到查詢:

SELECT [Document No], [Shipment Date], COUNT(*) AS Count 
FROM T 
GROUP BY [Document No], [Shipment Date]; 

Document No | Shipment Date | Count 
-------------------------------------- 
    1  | 2016-07-22 | 1 
    1  | 2016-07-23 | 1 
    2  | 2016-07-22 | 1 

你申請你留下沒有行HAVING COUNT(*) > 1子句,以便以後。這就是爲什麼你的第二個查詢的行數少於第一個。另外,我強烈建議你停止創建帶有空格和符號的對象名稱。它有點主觀,在我看來,Pascal的情況很好,我沒有看到DocumentNo[Document No_]更清晰,並且寫起來更容易。在最糟糕的情況下(我不喜歡它,但我知道它很受歡迎),您應該使用下劃線而不是空格來分隔單詞,所以最終會以Document_No結尾。如果你當然繼承了這個系統,並且現在做出改變爲時已晚,那麼你至少應該將這些表格的創建者從聖誕卡列表中刪除!

+0

嗨,謝謝你的回覆。我有電子郵件 –

+0

看我的帖子好,是 –

+0

我已經看到了編輯,但我仍然不確定你在問什麼。我已經用例子解釋了爲什麼當你有不同的列組時,你會得到不同的結果。你究竟在做什麼,你有什麼問題? – GarethD