Нужна коррекция - PullRequest
       2

Нужна коррекция

0 голосов
/ 25 февраля 2020

Что не так с этим запросом.

 with tt AS
    ( select   
    f.stdcode,
                 f.name,
                 f.fname,
                 f.degree_code,
                 f.interdegree,
                 MIN(f.startsem)as startsemdate,
                 MAX(f.startsem)as endsemedate
    FROM v_interstudata f
    GROUP BY 
      f.stdcode,
                 f.name,
                 f.fname,
                 f.degree_code,
                 f.interdegree
                )
    select   
    tt.stdcode,
      tt.name,
      tt.fname,
      tt.degree_code,
      tt.interdegree,
      (select sem_code 
             from v_interstudata a
            where a.stdcode=tt.stdcode 
             and a.startsem=tt.startsemdate) startsemester
      from tt

Вот ссылка на образец данных в файле Excel https://drive.google.com/open?id=1zf3ayRW_G_QR7lHY41kZqMdhHUQ-k_TK_u9O2IQjGkU введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Вам не нужно JOIN для этого. Вы можете использовать KEEP:

SELECT f.stdcode, f.name, f.fname, f.degree_code,  f.interdegree,
       MIN(f.startsem)as startsemdate,
       MAX(f.startsem)as endsemedate,
       MIN(sem_code) KEEP (DENSE_RANK FIRST ORDER BY startsem ASC) as first_sem_code,
       MIN(sem_code) KEEP (DENSE_RANK FIRST ORDER BY startsem DESC) as last_sem_code
FROM v_interstudata f
GROUP BY f.stdcode, f.name, f.fname, f.degree_code,  f.interdegree
1 голос
/ 25 февраля 2020

Один (или оба) из этих подзапросов:

  (select sem_code 
         from v_interstudata a
        where a.stdcode=tt.stdcode 
         and a.startsem=tt.startsemdate) startsemester,
  --
  (select sem_code
         from v_interstudata a
         where a.stdcode=tt.stdcode 
        and a.startsem=tt.endsemedate) endsemester

возвращает более одного значения, поэтому Oracle жалуется на это.

Что делать? Хорошо, если вы можете включить дополнительные условия, которые будут ограничивать количество строк до 1, сделайте это.

Я не знаю, насколько вы опытный Oracle (или SQL) пользователь, но - если вы еще не очень хорошо это знаете (пока), не используйте такие конструкции. Вы бы предпочли использовать объединения для получения нужных вам данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...