Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 посоветуйте !  [new]
av-kuz
Member

Откуда: Tambov
Сообщений: 47
Буду признателен совету
есть такой вот запрос

SELECT    distinct 
    w_p.reg_num "Шифр",
    p_c.f_name||' '||p_c.i_name||' '||p_c.o_name "ФИО студента (полностью)",
    w_p.pcard_pcard_id "№ персон карты",
    t3.name_long "курс",
    t1.name_long "специальность",
    t4.name_long "специализация",
    t5.name_long "форма обучения",
    t.name_short "Институт",
    t_bu.code "код Спец.",
    t2.name_long "УКП"
FROM 
     user.work_place w_p,   -- svodka userOV
     user.personal_card p_c, -- dannye userOV
     user.units t, -- institute
     user.units t1,-- specializaciya
     user.units t2, -- UKP
     user.units t3,-- kurs(diplomniki)
     user.units t4,-- specialnost
     user.units t5,-- forma_obuchenia
     user.base t_bu   -- privyazka k basovym unitam
WHERE 
      (p_c.tc_tc_id = 6 OR p_c.tc_tc_id = 4) -- vyborka dlya studentov
      AND w_p.status='Y'
      AND (w_p.pcard_pcard_id = p_c.pcard_id AND w_p.ubu_ubu_id = t2.ubu_id)
      AND t2.str_str_id=2 -- structura uchashiysya
      AND  ( t_bu.tbu_tbu_id = 20 AND t_bu.bun_id=t1.bun_bun_id) -- vyvodim vse specialnosti
      AND 
          (t4.ubu_ubu_id(+)=t2.ubu_id -- vyvodim vkluchaya onsutstvuyushie specializacii*/
          AND t1.ubu_ubu_id=t5.ubu_id
          AND t3.ubu_ubu_id=t1.ubu_id
          AND t2.ubu_ubu_id=t3.ubu_id
          AND t5.ubu_ubu_id=t.ubu_id)
   AND w_p.reg_num IN (SELECT   reg_num shifr      
					FROM 
					     user.work_place w_p,   -- svodka userOV
					     user.personal_card p_c, -- dannye userOV
					     user.units t, -- institute
					     user.units t1,-- specializaciya
					     user.units t2, -- UKP
					     user.units t3,-- kurs(diplomniki)
					     user.units t4,-- specialnost
					     user.units t5,-- forma_obuchenia
					     user.base t_bu   -- privyazka k basovym unitam
					WHERE 
					      (p_c.tc_tc_id = 6 OR p_c.tc_tc_id = 4) -- vyborka dlya studentov
						 AND w_p.status='Y'
					      AND (w_p.pcard_pcard_id = p_c.pcard_id AND w_p.ubu_ubu_id = t2.ubu_id)
					      AND t2.str_str_id=2 -- structura uchashiysya
					      AND  ( t_bu.tbu_tbu_id=20 AND t_bu.bun_id=t1.bun_bun_id) -- vyvodim vse specialnosti
					      AND 
					          (t4.ubu_ubu_id(+)=t2.ubu_id -- vyvodim vkluchaya onsutstvuyushie specializacii
					          AND t1.ubu_ubu_id=t5.ubu_id
					          AND t3.ubu_ubu_id=t1.ubu_id
					          AND t2.ubu_ubu_id=t3.ubu_id
					          AND t5.ubu_ubu_id=t.ubu_id)
					GROUP BY w_p.reg_num
					having count(*) > 1
				)

однако,все работает только на локальной базе при обращении к рабочей на сервер процесс длиться слишком долго более 15 мин (далее я его прервал)
подзапрос для дублей reg_num дает 1052 значений
основной запрос без условия AND w_p.reg_num IN (SELECT ... дает 19904 строки
16 фев 07, 14:13    [3796568]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте !  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116328
Посмотрел.

Это Вы что то подобное пытаетесь сделать ?

select * from scott.emp
where deptno in 
(select deptno from scott.emp group by deptno having count(*) > 1)
/

Попробуйте например так

select empno, ename, deptno -- , .....
from
(select e.*, count(*) over (partition by deptno) cnt from scott.emp e)
where cnt > 1
16 фев 07, 14:19    [3796650]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте !  [new]
av-kuz
Member

Откуда: Tambov
Сообщений: 47
попробую ...
16 фев 07, 14:22    [3796681]     Ответить | Цитировать Сообщить модератору
 Re: посоветуйте !  [new]
av-kuz
Member

Откуда: Tambov
Сообщений: 47
2 dmidek

Попробуйте например так

select empno, ename, deptno -- , .....
from
(select e.*, count(*) over (partition by deptno) cnt from scott.emp e)
where cnt > 1

СПАСИБО!!!
2563 rows selected in 3.687 seconds!!!

и за то что не поленились почториться )

dmidek
Хм. Смешная задачка.
Полностью в лоб.

SQL> select deptno
  2    from (select deptno,
  3                 row_number() over(partition by deptno order by rowid) rn,
  4                 count(*) over(partition by deptno) cnt
  5            from scott.emp)
  6   where rn < cnt
  7  /

DEPTNO
------
    10
    10
    20
    20
    20
    20
    30
    30
    30
    30
    30

11 rows selected

SQL> 

а я первый раз не разобрался )
16 фев 07, 15:50    [3797433]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить