Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle sql查询-基于优先级填充值_Sql_Database_Oracle - Fatal编程技术网

oracle sql查询-基于优先级填充值

oracle sql查询-基于优先级填充值,sql,database,oracle,Sql,Database,Oracle,表1列出了为学生公布的分数详情。现在所有的分数都还没有出来,根据empid,很少有人发表 表1 表2列出了本学期所有科目的详细情况以及优先顺序 表2 表1列出了每个学生已公布的科目分数的详细信息。 表2列出了semister中subgrp中存在的所有主题的详细信息 我想写一个查询以了解以下内容 如果你仔细观察,Tab2是我的主表,Tab1是左接的,这样我就可以考虑Tab2的所有值。 查询的输出 subgrp,empid,subject,marks,priority 1 ,4 ,ph

表1列出了为学生公布的分数详情。现在所有的分数都还没有出来,根据empid,很少有人发表

表1

表2列出了本学期所有科目的详细情况以及优先顺序

表2

表1列出了每个学生已公布的科目分数的详细信息。 表2列出了semister中subgrp中存在的所有主题的详细信息

我想写一个查询以了解以下内容

如果你仔细观察,Tab2是我的主表,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
我无法写下逻辑,即如何根据tab2数据为每个emp id填充5条记录


任何人都可以帮助..

使用
交叉连接来生成行,使用
左连接来引入数据:

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;

使用
交叉连接
生成行,使用
左连接
引入数据:

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;

您可以使用
交叉连接
,然后在其上使用
分组方式

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

干杯

您可以使用
交叉连接
,然后在其上使用
分组方式

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

干杯

@leftjoin。首先,这个问题被标记为Oracle,它的标题中包含Oracle。所以我不确定Hive指的是什么。我可能看到的唯一问题是
subgrp
也可能用于员工。但是OP没有解释这一点。@leftjoin。首先,这个问题被标记为Oracle,它的标题中包含Oracle。所以我不确定Hive指的是什么。我可能看到的唯一问题是
subgrp
也可能用于员工。但OP没有解释这一点。