【问题标题】:SQL Copied query from MS Access来自 MS Access 的 SQL 复制查询
【发布时间】:2018-10-08 13:22:41
【问题描述】:

我正在尝试在 SQL 中重新创建 MS Access 查询,以下是转换为在 SQL 中运行的 Access 查询

    SELECT Column1
          ,Column2
          ,Column3
          ,Count('x') AS CountX
    FROM [SchmaName].[SQLView]
    WHERE ("SomeWhereStatement")
    GROUP BY Column1, Column2, Column3
    HAVING Count('x')>1;

我很困惑的是

 ,Count('x') AS CountX

 HAVING Count('x')>1;

X 不是来自已创建的 SQLView,当我运行上述命令时,它将返回一条记录,其中 1 - 3 列为空,CountX 列为 12896。我预计这将返回大约 4285 条记录,并且我怀疑我不是这个伯爵的原因。关于这个计数实际上在做什么有什么建议吗?

【问题讨论】:

  • 使用count('x') 与使用count(1)count(*) 没有什么不同——它只是计算文字字符串(尽管这是一种非常奇怪的方式)。您确定您有分组依据的其他列的值吗?听起来他们都是null,因此聚合成一个结果。样本数据和预期结果会有所帮助。
  • 查询似乎在寻找重复项HAVING Count('x')>1;

标签: sql sql-server ms-access


【解决方案1】:

当您在COUNT() 中传递任何常量参数时(即“x”是常量参数),它将返回记录总数:

因此,通过您的查询,它将根据使用GROUP BY 子句定义的列返回记录。

SELECT Column1, Column2, Column3, Count('x') AS CountX
FROM [SchmaName].[SQLView]
WHERE ("SomeWhereStatement")
GROUP BY Column1, Column2, Column3
HAVING Count('x') > 1; 

【讨论】:

  • 好的,谢谢,这解释了它在做什么,并为我指明了正确的方向
猜你喜欢
  • 2013-06-04
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多