我有这个:
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
所以我尝试用双手去除双打。但是在这种情况下如何只返回带有标题的树结果(即唯一值):文件编号和装运日期?
谢谢
如果我这样做:
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_]
它将返回完全相同的结果
答案 0 :(得分:1)
右键!
您正在执行两个不同的查询。
第一组仅用于Document_No,第二组用于两个字段,Document_No和装运日期
一个例子。
假设你有这个数据:
Document No | Shipment Date
1 | 2015-01-01
2 | 2015-01-01
1 | 2016-01-01
第一个查询返回2个ROWS(按文档编号分组,因此第一行和第三行是collpased而第二行)
第二个查询返回3个ROWS(按Docvument No分组,发货日期是三个不同的组合)。
一个有趣的问题是......在你的表中,如果你有相同的文件号的更多行?为什么您对同一文件号有不同的发货日期?
答案 1 :(得分: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
。如果你刚刚继承了这个系统,而且要做出改变为时已晚,那么你至少应该把这些桌子的原创者从你的圣诞卡清单中拿走!