Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выборка строк с одинаковыми именами и разными .. ыборка строк с одинаковыми именами и раз 
:(
    Опции темы
Progis
Дата 22.4.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 15.7.2008

Репутация: нет
Всего: нет



Надо сделать выборку строк с повторяюшимися именами но разными датами.. Предположим в таблице  8 записей, 5 из них имеют одинаковые поля фамилия FIO, имя IMA, отчество OTCH,
пол POL и дата рождения DATR, но разные коды CODE_MO сначала надо выбрать их, потом среди этих записей надо выбрать только те у которых поля начальная дата DATN и конечная дата DATO скрещиваются, тоесть у них есть общий хоть один день .. 

Вот сам запрос: 

select p.Person_ID,p.NS,p.VS,p.DATS,p.DATPS,p.CODE_MO,p.PL_OGRN,p.KSO,p.SN,p.FIO,p.IMA,p.OTCH,
p.POL,p.KAT,p.SNILS,p.SPS,p.SPN,p.PAS,p.PAN,
p.DATR,p.KSMO,p.TSMO,p.ISMO,p.STRANA,p.ADR,p.MRAB,p.NAPR_MO,p.ISTI,p.DATN,p.DATO,p.ISHL,
p.ISHOB,p.MP,p.FIOS,
p.IS_VNESH,p.NAPR_N,p.NAPR_D,p.SUMMA_I,p.PV,p.DVOZVRAT,s.TITLE,l.NAME,pa.TITLE 
from temp_Person p
left join SMO s on s.OGRN = p.PL_OGRN
left join LPU_FULL l on l.OMS_CODE = p.CODE_MO
left join PAYER pa on pa.OMS_CODE = p.CODE_MO   

where /* здесь предпологается поставить условие на вышеперечисленную выборку*/

//---------------------------------------
думаю этот запрос проще для восприятия хотя суть одна  (с ним легче приводить примеры решения вопроса  smile ) 
select
FIO, IMA, OTCH,POL,DATR,CODE_MO, DATN, DATO
from temp_Person

where /* что написать в условии? */ 
//----------------------------------------

Если кто сможет помоч в решении этого вопроса буду очень благодарен.


PM MAIL   Вверх
Zioma
Дата 22.4.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 22.8.2007

Репутация: 5
Всего: 5



Делаешь подзапрос с group by по полям "фамилия FIO, имя IMA, отчество OTCH, пол POL и дата рождения DATR" и having count(*)>1. Таким образом у тебя будет список записей где "одинаковые поля фамилия FIO, имя IMA, отчество OTCH,пол POL и дата рождения DATR, но разные коды CODE_MO".

А дальше связываешь с основным запросом и ставишь необходимые условия.
PM MAIL   Вверх
Progis
Дата 23.4.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 15.7.2008

Репутация: нет
Всего: нет



я рассматривал такой вариант, он не подходит =( при группировке (group by) для выборке по счетчику( having count(*)>1  ) необходимо указывать те же поля что и в select'е. а в этом случае это недопустимо + даже если и умудрится это реализовать все равно коды (CODE_MO) будут одинаковыми.
Я решил проблему с помощью такого варианта:
- джойним (left join ) таблицу саму к себе(разумеется с разными псевдонимами) по FIO, IMA, OTCH, POL, DATR и  CODE_MO а потом в условии прописать 'выбрать все где ID не 0' , единственное с датами  надо более грамотно все реализавать. 

запрос выглядит следующим образом:
Код

select p.Person_ID,p.NS,p.VS,p.DATS,p.DATPS,p.CODE_MO,p.PL_OGRN,p.KSO,p.SN,p.FIO,p.IMA,p.OTCH,p.POL,
p.KAT,p.SNILS,p.SPS,p.SPN,p.PAS,p.PAN,
p.DATR,p.KSMO,p.TSMO,p.ISMO,p.STRANA,p.ADR,p.MRAB,p.NAPR_MO,p.ISTI,p.DATN,p.DATO,p.ISHL,
p.ISHOB,p.MP,p.FIOS,
p.IS_VNESH,p.NAPR_N,p.NAPR_D,p.SUMMA_I,p.PV,p.DVOZVRAT,s.TITLE,l.NAME,pa.TITLE 
from temp_Person p
left join SMO s on s.OGRN = p.PL_OGRN
left join LPU_FULL l on l.OMS_CODE = p.CODE_MO
left join PAYER pa on pa.OMS_CODE = p.CODE_MO
left join temp_Person p1 on p1.FIO = p.FIO and p1.IMA = p.IMA and
p1.OTCH = p.OTCH and p1.POL = p.POL and p1.DATR = p.DATR and 
((p.DATN = p1.DATN and p.DATO = p1.DATO) or ( p.DATN<p1.DATN and (p1.DATO < p.DATO and p1.DATO>p.DATN)) or 
( p.DATN > p1.DATN and ( p.DATN < p1.DATO)) or  (p.DATO > p1.DATO and p1.DATO > p.DATN))
and p.CODE_MO <> p1.CODE_MO
where p1.Person_ID is not null


Надеюсь кому-нибуть это пригодится .. 
(P.S. "Спасибо за помошь Zioma") 





PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.