DistinctRow返回重复的行(MS-Access SQL)

时间:2018-07-23 19:23:44

标签: sql ms-access

我有以下4个字段的查询。当我运行它时,有很多重复的行。我发现了很多摆脱它们的方法,但是没有一种方法有效。这是查询(输出中有重复项):

SELECT 
R.CODNEG, 
C.FimMês As DATA, 
Format (
         (
         select sum(R2.Rendimento)
         from Rendimentos R2
         where
             R2.CODNEG = R.CODNEG and
             R2.FimMes > dateadd("m", -12, R.FimMes) and
             R2.FimMes <= R.FimMes
         )
          /
         (select sum(C2.VOLTOT) / sum(C2.QUATOT)
         from CotacoesHistoricasNova C2
         where
              C2.CODNEG = C.CODNEG and
              C2.FimMês > dateadd("m", -12, C.FimMês) and
              C2.FimMês <= C.FimMês
         ),
     "Percent") AS DYaa,
Format (
         12*R.Rendimento
         /
         (select sum(C2.VOLTOT) / sum(C2.QUATOT)
         from CotacoesHistoricasNova C2
         where
              C2.CODNEG = C.CODNEG and
              C2.FimMês = C.FimMês
           ),
    "Percent") AS DY12m
FROM 
CotacoesHistoricasNova AS C,
Rendimentos AS R, 
Tickers AS T
WHERE 
     C.CODNEG = T.TickerGde and
     R.CODNEG = T.Ticker and
     C.FimMês = R.FimMes

这将返回以下输出(运行约10秒):
(示例)

CODNEG    DATA           DYaa     DY12m
ABCD11    31/jul/2018    5,50%    6,71%
ABCD11    31/jul/2018    5,50%    6,71% <--- duplicate!
...       ...            ...      ...
ABCD11    31/aug/2018    4,41%    7,05%
  • 当我尝试DISTINCT时,它会永远运行(10分钟,仍然 正在运行...)
  • 当我尝试DISTINCTROW时,它的运行时间约为10秒,但输出为 一样
  • 当我尝试GROUP BY R.CODNEG, C.FimMês, DYaa, DY12m时,它会返回 此消息:“您的查询不包含指定的表达式 “ Format(12*R.Rendimento/,"Percent")”作为汇总的一部分 功能。”

输出应该是这样的(无重复):
(示例)

CODNEG    DATA           DYaa     DY12m
ABCD11    31/jul/2018    5,50%    6,71%
ABCD11    31/aug/2018    4,41%    7,05%
ABCD11    30/sep/2018    3,12%    2,50%
...       ...            ...      ...
XYZW11    31/jan/2018    1,25%    1,64%
XYZW11    28/feb/2018    3,005    2,85%

有什么想法DISTINCTROW不删除重复项以及如何解决此问题?

1 个答案:

答案 0 :(得分:0)

关于DISTINCTROW在您的情况下不起作用的原因,我在Microsoft Access帮助文件中找到了一条线索...

  如果查询仅包含一个表,或者如果

... DISTINCTROW被忽略   您将从所有表中输出字段。

如果创建分组查询作为帖子中列出的查询的包装,会发生什么情况?换句话说,将现有查询另存为数据库中的命名查询,然后创建一个新的分组查询并将第一个查询用作记录源。比DISTINCT方法能为您带来更好的性能吗?