SQL-запрос Oracle - заполнение значений на основе приоритета - PullRequest
1 голос
/ 23 октября 2019

tab1 содержит информацию об оценках, опубликованных для студентов. теперь все оценки еще не опубликованы, поскольку опубликовано только несколько empid.

tab1

subgrp,empid,sub,marks
1     ,4    ,phy,  90
1     ,4    ,ls ,  44
1     ,5    ,eng,  80
1     ,5    ,eco,  66

tab2 содержит сведения обо всех предметах, представленных в семестре, а также приоритет.

tab2

subgrp,sub,priority
1     ,phy,    1
1     ,math,   2
1     ,ls  ,   3
1     ,eng ,   4
1     ,eco,    5

На вкладке 1 приведены сведения об уже опубликованных оценках по предметам для каждого учащегося. На вкладке 2 содержатся подробные сведения обо всех предметах, присутствующих в подгруппе, которая находится в полустере.

Я хотел бы написать запрос, чтобы выяснить следующее ..

, если вы внимательно наблюдаете, вкладка2 - это мойОсновная таблица и tab1 оставлены объединенными, так что я могу рассмотреть все значения tab2.

вывод запроса

subgrp,empid,subject,marks,priority
1     ,4    ,phy    ,90   ,1
1     ,4    ,math   ,null ,2
1     ,4    ,ls     ,90   ,3
1     ,4    ,eng    ,null ,4
1     ,4    ,eco    ,null ,5
1     ,5    ,phy    ,null ,1
1     ,5    ,math   ,null ,2
1     ,5    ,ls     ,null ,3
1     ,5    ,eng    ,80   ,4
1     ,5    ,eco    ,66   ,5

запрос, который я пытался написать, неполный, так как я не могу преобразоватьлогика в sql ..

 select a.subgrp,a.emoid , a.sub as subject,a.marks,b.priority from
 tab2 a left join tab1 b on a.subgrp=b.subgrp and a.sub=b.sub

Я не могу записать логику, как заполнить 5 записей для каждого emp-id на основе данных tab2.

Может кто-нибудь, пожалуйста, помогите. .

Ответы [ 2 ]

3 голосов
/ 23 октября 2019

Используйте cross join для генерации строк и left join для ввода данных:

select t2.substr, e.empid, t2.subject, t.marks, t2.priority
from (select distinct empid from tab1
     ) e cross join
     tab2 t2 left join
     tab1 t
     on t.empid = e.empid and
        t.subgrp = t2.subgrp and
        t.sub = t2.sub
order by e.empid, t2.priority;
0 голосов
/ 23 октября 2019

Вы можете использовать cross join, а затем group by.

Select t1.subgrp, 
       t1.empid, 
       t2.subject,
       Max(t1.marks) as marks, 
       t2.priority
  From tab1 t1 cross join tab2 t2
  Group by t1.subgrp, 
           t1.empid, 
           t2.subject, 
           t2.priority

Приветствия !!

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