我有一些似乎没有正确计算的数据。当我查看原始数据时,我在给定列中看到5个不同的值,但是当我运行“Count(Distinct ColA)”时,它会报告4.对于我正在分组的所有类别,这也是如此,而不仅仅是一。例如。当有3时,列中的第2个值报告2,当有2时,第3个值报告1,等等。
表A:ID,类型
表B:ID_FK,WorkID,日期
以下是我的查询摘要:
SELECT COUNT (DISTINCT B.ID_FK), A.Type
FROM A INNER JOIN B ON B.ID_FK = A.ID
WHERE Date > 5/1/2013 and Date < 5/2/2013
GROUP BY Type
ORDER BY Type
结果的片段:
4|Business
2|Design
2|Developer
以下是我的数据示例,未汇总。管道是分离器;我刚刚删除了上面查询的'COUNT ...'和'GROUP BY ...'部分,以获取此信息:
4507|Business
4515|Business
7882|Business
7889|Business
7889|Business
8004|Business
4761|Design
5594|Design
5594|Design
5594|Design
7736|Design
7736|Design
7736|Design
3132|Developer
3132|Developer
3132|Developer
4826|Developer
5403|Developer
从数据中可以看出,商业应该是5,而不是4,等等。至少这是我的眼睛告诉我的。 :)
我使用它的内部ExecuteSQL调用在FileMaker 12解决方案中运行它。不过,请不要太担心:代码应该和其他任何代码一样。 :)
任何帮助都将不胜感激。
谢谢, Ĵ
答案 0 :(得分:1)
尝试使用子查询:
SELECT COUNT(*), Type
FROM (SELECT DISTINCT B.ID_FK, A.Type Type
FROM A
INNER JOIN B ON B.ID_FK = A.ID
WHERE Date > 5/1/2013 and Date < 5/2/2013) x
GROUP BY Type
ORDER BY Type
答案 1 :(得分:1)
这可能是FileMaker问题,你在FileMaker论坛上看过this post吗?它描述了相同的问题(计数明显小于1),其中11V3在03/2012回到插件,然后updated在12/203与ExecuteSQL有12v3相同的问题。在任何一种情况下似乎都没有得到解决。
如果在连接表上存在任何参照完整性约束,或者如果您可以获得查询执行计划,则可能会发现其执行查询的方式与预期不同。不确定FileMaker是否可以这样做。
我喜欢Barmar的建议,它会排序两次。
如果您正在处理错误,通过构建查询以使它们在不同时间发生来指导COUNT DISTINCT,Join和/或Group By可能会解决它:
SELECT COUNT (DISTINCT x.ID), x.Type
FROM (SELECT A.ID ID, A.Type Type
FROM A
INNER JOIN B ON B.ID_FK = A.ID
WHERE B.Date > 5/1/2013 and B.Date < 5/2/2013) x
GROUP BY Type
ORDER BY Type
您也可以尝试将A.ID_FK替换为A.ID,后者知道它适用的上下文,例如: SELECT COUNT(DISTINCT A.ID),A。Type