Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
*Ann* Member Откуда: Сообщений: 101 |
Добрый день. Есть такой запрос: select ph.orponid as GlobalID , sys.external_id as "HouseID" , ph.adr_adm_ter as "Адрес" from edw_prod.edw_ods.t_000148_ent_as_house ph JOIN edw_prod.edw_ods.t_000148_ent_id_vs_o_add sys on ph.id = sys.house_id and sys.system_id = 354541532 where 1=1 and ph.livestatus = 1 and ph.mrf_id = 354858663--Сибирь and ph.parent_id is not null order by ph.orponid; Как его преобразовать так, чтобы вывести только строки с повторяющимися идентификаторами sys.external_id? |
29 дек 18, 05:50 [21776166] Ответить | Цитировать Сообщить модератору |
Щукина Анна Member Откуда: Сообщений: 1507 |
*Ann*, как вариант (внесенные мною изменения - выделены цветом...): select * from ( select ph.orponid as GlobalID , sys.external_id as "HouseID" , ph.adr_adm_ter as "Адрес" , count() over(partition by sys.external_id) as x_cnt from edw_prod.edw_ods.t_000148_ent_as_house ph JOIN edw_prod.edw_ods.t_000148_ent_id_vs_o_add sys on ph.id = sys.house_id and sys.system_id = 354541532 where 1=1 and ph.livestatus = 1 and ph.mrf_id = 354858663--Сибирь and ph.parent_id is not null ) v where x_cnt > 1 order by GlobalID; |
29 дек 18, 06:01 [21776170] Ответить | Цитировать Сообщить модератору |
Щукина Анна Member Откуда: Сообщений: 1507 |
|
||
29 дек 18, 06:02 [21776172] Ответить | Цитировать Сообщить модератору |
*Ann* Member Откуда: Сообщений: 101 |
Щукина Анна, Большое спасибо за помощь. Работает. Но почему-не анализирует фильтр по системе sys.system_id = 354541532, выдаёт дубли во всех системах. |
29 дек 18, 06:57 [21776181] Ответить | Цитировать Сообщить модератору |
*Ann* Member Откуда: Сообщений: 101 |
Щукина Анна, Ошиблась, все работает. Ещё раз большое спасибо! |
29 дек 18, 06:59 [21776183] Ответить | Цитировать Сообщить модератору |
*Ann* Member Откуда: Сообщений: 101 |
Добрый день. Подскажите еще, пожалуйста, как сделать вывод дублирующих записей по двум столбцам (в моем случае по полям Широта и Долгота). Вот запрос , который выводит адреса с координатами: select eah.orponid as GlobalID , eah.adr_adm_ter as Адрес , hc.latitude as Широта , hc.longitude as Долгота from CHD.ent_as_house eah LEFT OUTER JOIN chd.house_coordinates hc on eah.coordinates_id = hc.id where 1=1 and eah.livestatus = 1 and eah.parent_id is not null order by eah.orponid; И я посчитала, что по координатам есть дублирующие записи: select hc.latitude , hc.longitude , count(*) from public.house_coordinates as hc group by hc.latitude, hc.longitude having count(*) > 1 Вот в первом запросе мне надо вывести только дубли. Как это сделать? С over partition by у меня не получилось с двумя столбцами. |
11 янв 19, 06:10 [21782370] Ответить | Цитировать Сообщить модератору |
Щукина Анна Member Откуда: Сообщений: 1507 |
*Ann*, показывайте, как делали... З.Ы. Подсказка (не вдаваясь в тонкости терминологии и технические детали): считайте для себя, что в аналитических функциях конструкция "PARTITION BY" - это аналог конструкции "GROUP BY" агрегатного запроса... Соответственно, если в агрегатном запросе дубли искали через group by hc.latitude, hc.longitude , то и в аналитическом нужно указывать PARTITION BY hc.latitude, hc.longitude |
11 янв 19, 06:35 [21782373] Ответить | Цитировать Сообщить модератору |
*Ann* Member Откуда: Сообщений: 101 |
Пробовала по аналогии с предыдущим запросом: select * from ( select eah.orponid as GlobalID , eah.adr_adm_ter as Адрес , hc.latitude as Широта , hc.longitude as Долгота , count() over(partition by hc.latitude, hc.longitude) as x_cnt from public.ent_as_house eah LEFT OUTER JOIN public.house_coordinates hc on eah.coordinates_id = hc.id where 1=1 and eah.livestatus = 1 and eah.mrf_id = (select id from public.ent_rf_rtk where name = 'МРФ Центр') and eah.parent_id is not null order by eah.orponid ) v where x_cnt > 1 order by hc.latitude, hc.longitude; Выдает ошибку ERROR: 42809: count(*) must be used to call a parameterless aggregate function |
11 янв 19, 07:08 [21782378] Ответить | Цитировать Сообщить модератору |
Kopelly Member Откуда: Красноярск Сообщений: 289 |
*Ann*,, count(*) over(partition by hc.latitude, hc.longitude) as x_cnt |
11 янв 19, 07:30 [21782384] Ответить | Цитировать Сообщить модератору |
*Ann* Member Откуда: Сообщений: 101 |
Теперь ошибка missing from-clause entry for table 'hc'. В from у меня другая таблица. А с hc идёт соединение по left join |
11 янв 19, 07:40 [21782387] Ответить | Цитировать Сообщить модератору |
*Ann* Member Откуда: Сообщений: 101 |
Нашла, в чем была ошибка. Спасибо большое за помощь! |
11 янв 19, 09:00 [21782426] Ответить | Цитировать Сообщить модератору |
Charles Weyland Member Откуда: Feorina "Fury" 161 Сообщений: 4353 |
Топик Ань. |
11 янв 19, 16:27 [21783029] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |