【问题标题】:How to use DISTINCT in nested personal geodatabse SQL in ArcGIS如何在 ArcGIS 的嵌套个人地理数据库 SQL 中使用 DISTINCT
【发布时间】:2014-11-06 14:48:52
【问题描述】:

我在 ArcGIS 中将此声明用于个人地理数据库。 它选择 [MyColumn1] 中的前三个记录,但如果 [MyColumn2] 等于内联变量,则不选择。

[MyColumn1] in(SELECT TOP 3  ( [MyColumn1] ) 
FROM MyTable
WHERE [MyColumn2]  <> %Variable%
ORDER BY [MyColumn1] DESC)

但我还需要添加一个 DISTINCT 函数,因为有时 [MyColumn1] 中存在重复值,因此选择了 4 条记录。

如何在此表达式中包含 DISTINCT 以便 ArcCrash 和个人地理数据库可以处理它?关于这个主题有很多,但没有特定于工作 Arc 或至少访问。

这行不通

[MyColumn1] in(SELECT TOP 3  ( [MyColumn1] ) 
FROM MyTable
WHERE [MyColumn2]  <> %Variable%
ORDER BY [MyColumn1] DESC 
DISTINCT [MyColumn1] ) 

也没有

[MyColumn1] in(SELECT TOP 3  ( [MyColumn1] ) 
FROM MyTable
WHERE [MyColumn2]  <> %Variable%
ORDER BY [MyColumn1] DESC 
GROUP BY [MyColumn1]) 

【问题讨论】:

  • 我对 arcgis 查询并不精通,但在大多数查询语言中,select 中的不同之处在于。所以试试:SELECT DISTINCT TOP 3 [MyColumn1]
  • 如果 [MyColumn1] 中有重复,这仍然会选择 4 条记录。查询不会出错。

标签: sql syntax distinct arcgis


【解决方案1】:

好吧,因为这不是完整的查询,所以您的 select top 3 将返回 3 条记录,但是如果您的 MyColumn1 有重复项并且 select distinct 返回其中一个有重复项,那么这两个都将包含在 In陈述。例如。

FirstName | LastName
Bob          doe
Billy        smith
Marie        Evans
Bob          Lock

如果你这样做 Select * from table where FirstName in (SELECT DISTINCT TOP 3 FirstName FROM table)

您将获得所有 4 条记录,因为您的内部查询将返回 ("Bob", "Billy", "Marie") 并且由于您的初始查询 (Select * from table where FirstName in ("Bob", "Billy", “Marie”)) 想要具有这 3 个名字的记录,它们都至少具有其中一个名字。这里的解决方案就是这个查询。

Select Distinct FirstName from table where FirstName in (SELECT DISTINCT TOP 3 FirstName FROM table)

这样做的问题是,当您执行 distinct 时,您需要在其中包含所有列名,这样您就无法从此查询中获取姓氏列。

【讨论】:

  • 我相信我现在有语法问题。你能详细说明一下吗?
    SELECT DISTINCT [MyColumn1] FROM MyTableWHERE [MyColumn1] in(SELECT DISTINCT TOP 3 ( [MyColumn1] )FROM MyTableHERE [MyColumn2] &lt;&gt; 3ORDER BY [MyColumn1] DESC )这不起作用...我收到语法错误。
  • 好吧,此时您实际上并不需要子查询,因为您可以将子查询用作主查询。试试这个:SELECT DISTINCT TOP 3 [MyColumn1] FROM MyTable WHERE [MyColumn2] 3 ORDER BY [MyColumn1] DESC
  • 这个问题可能是因为 arcgis 要求 DISTINCT、GROUP BY 和其他函数为子查询格式,因为强制 SELECT * FROM MyTable WHERE:
  • 是的,如果您无法区分主选择,那将是一个问题,那么您将始终返回与您的子查询匹配的所有项目。
  • 刚刚找到了解决问题的ArcGIS专有功能。感谢您的帮助!
【解决方案2】:

我使用了 ArcGIS 工具 Delete Identical,它删除了多个相同记录中的第一个。哈。相当完美。

【讨论】:

    猜你喜欢
    • 2014-08-19
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2021-12-19
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多