Внедрение оператора count в список выбора

Я использую Esri ArcMap 10.0 с Microsoft Sql Server 2008 R2.

У меня есть 2 таблицы:

  1. MN_SCHOOLS_PUBLIC - поле идентификатора школы называется ORGID_REL
  2. TRPD_Schdgrps_Schools - поле идентификатора школы называется School_Code

Первая таблица — это просто список школ с их адресами, вторая таблица — это список групповых бронирований, сделанных школами. Каждая школа в таблице 2 существует в таблице 1. Я пытаюсь создать запрос, в котором я генерирую список школ, которые сделали несколько бронирований. Вот что я придумал:

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

Это помогло или, по крайней мере, достаточно близко. Однако моя проблема заключается в том, что я должен запустить этот запрос в программном обеспечении ГИС, инструмент запроса (Выбрать по атрибутам в Esri ArcMap) ВСЕГДА запускает оператор выбора для пользователя. Итак, когда вы открываете инструмент, запрос начинается с:

select * from gisadmin.MN_SCHOOLS_PUBLIC

Я хочу выбрать все школы в таблице 1, которые имеют несколько записей в таблице 2, и мне нужно начать с приведенного выше оператора выбора. Вот что я придумал, но я не могу понять, как заставить его работать:

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)))

Любая помощь будет принята с благодарностью


person user1074006    schedule 30.11.2011    source источник


Ответы (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
)
person mwigdahl    schedule 30.11.2011
comment
Это прекрасно работает в SQL Management Studio, но не будет работать в ГИС, потому что оператор Select перед первым оператором where изменен, вы добавили msp. Он должен начинаться SELECT * FROM gisadmin.MN_SCHOOLS_PUBLIC WHERE Изменения могут быть сделаны только ПОСЛЕ предложения where - person user1074006; 30.11.2011
comment
ВЫБЕРИТЕ * ИЗ gisadmin.MN_SCHOOLS_PUBLIC, ГДЕ gisadmin.MN_SCHOOLS_PUBLIC.ORGID_REL IN (ВЫБЕРИТЕ tss.School_Code FROM Central2.gisadmin.TRPD_SCHDGRPS_SCHOOLS tss GROUP BY tss.School_Code HAVING COUNT(*) › 1 ) - person user1074006; 30.11.2011
comment
Да, если вы не можете изменить данные перед WHERE, вы не можете использовать псевдонимы. Рад, что это сработало для вас! - person mwigdahl; 01.12.2011