2016-07-22 176 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