【问题标题】:Embed a count statement in a a select list在选择列表中嵌入计数语句
【发布时间】:2011-11-30 18:43:37
【问题描述】:

我将 Esri ArcMap 10.0 与 Microsoft Sql Server 2008 R2 一起使用

我有 2 张桌子:

  1. MN_SCHOOLS_PUBLIC - 学校 ID 字段称为 ORGID_REL
  2. TRPD_Schdgrps_Schools - 学校 ID 字段称为 School_Code

第一个表只是学校的地址列表,第二个表是学校进行的团体预订列表。表 2 中的每所学校都存在于表 1 中。我正在尝试创建一个查询,在其中生成已进行多次预订的学校列表。这是我想出的:

select School_Code
from central2.gisadmin.TRPD_SCHDGRPS_SCHOOLS
group by School_Code
having COUNT(*) > 1

这成功了,或者至少足够接近。但是,我的问题在于我必须在 GIS 软件中运行此查询,查询工具(在 Esri 的 ArcMap 中按属性选择)总是为用户启动选择语句。因此,当您打开该工具时,查询将以:

select * from gisadmin.MN_SCHOOLS_PUBLIC

我想选择表 1 中所有在表 2 中有多个条目的学校,我需要从上面的 select 语句开始。这是我想出的,但我似乎无法弄清楚如何让它工作:

select * from gisadmin.MN_SCHOOLS_PUBLIC
where EXISTS 
(SELECT * 
FROM central2.GISADMIN.TRPD_Schdgrps_Schools 
WHERE central2.GISADMIN.MN_Schools_PUBLIC.ORGID_REL =
(select * from central2.gisadmin.TRPD_SCHDGRPS_SCHOOLS
where School_Code in
(select School_Code
from central2.gisadmin.TRPD_SCHDGRPS_SCHOOLS
group by School_Code
having COUNT(*) > 1)))

任何帮助将不胜感激

【问题讨论】:

    标签: sql-server-2008 gis esri


    【解决方案1】:

    试试这个:

    SELECT * FROM gisadmin.MN_SCHOOLS_PUBLIC msp
    WHERE msp.School_Code IN
    (
        SELECT tss.School_Code
        FROM central2.gisadmin.TRPD_SCHDGRPS_SCHOOLS tss
        GROUP BY tss.School_Code
        HAVING COUNT(*) > 1
    )
    

    【讨论】:

    • 这在 SQL Management Studio 中效果很好,但在 GIS 中不起作用,因为在第一个 where 更改之前的 Select 语句,您添加了 "msp" 它需要启动 "SELECT * FROM gisadmin. MN_SCHOOLS_PUBLIC WHERE" 只能在 where 子句之后进行更改
    • SELECT * FROM gisadmin.MN_SCHOOLS_PUBLIC WHERE gisadmin.MN_SCHOOLS_PUBLIC.ORGID_REL IN (SELECT tss.School_Code FROM central2.gisadmin.TRPD_SCHDGRPS_SCHOOLS tss GROUP BY tss.School_Code HAVING COUNT(*) >1)
    • 是的,如果你不能在 WHERE 之前更改数据,那么你就不能使用别名。很高兴它对你有用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多