2015-04-23 33 views
-5

我有2个表classgrade基本计数查询

这是在class表样本行:

C_NAME....C_TIME...F_NAME..C_ROOM...SEMESTER 
INSS300...M5:30....DWIGHT..219BC....FALL11 
INSS300...T5:30....KEEN....216BC....FALL11 
MKT300....M5:30....Lee.....112BC....SP11 
MKT300....W5:30....Lee.....112BC....SP11 
INSS421...T5:30....CORY....212BC....FALL11 
FIN300....TH5:30...KEEN....219BC....FALL11 
INSS300...W5:30....CORY....219BC....FALL11 
INSS300...F5:30....CORY....216BC....FALL11 
INSS422...F5:30....KEEN....219BC....FALL11 

,这是在grade

S_NAME C_NAME  G 
LARRY....INSS300....B 
LARRY....FIN300.....A 
SONY.....INSS300....C 
SONY.....INSS421....C 
GRAY.....INSS300....C 
GRAY.....INSS421....D 
TRUDY....INSS300....B 
DRUM.....INSS421....A 
DRUM.....FIN300.....B 
PURI.....INSS422....C 
APPLE....INSS422....C 
LARRY....INSS422....C 
LARRY....INSS300....B 
SONY.....INSS300....C 
GRAY.....INSS300....C 
TRUDY....INSS300....B 

我的问题,我要回答的样本数据:

假设这些表位于您的帐户Ordb002中。您只需将 的所有三个表的权限都读取给您的组成员Sally,该帐户的 帐户是Ordb009。假设你已经给所有表格的 授予Sally读权限。莎莉希望获得教师和课程的成绩(即A,B,C等) 。为SALLY写一个查询以获得此计数。

我想出了这个查询

select cla.f_name 
    , gra.c_name 
    , count(grade) 
    , grade 
from class1 cla 
    , grade1 gra 
where cla.c_name=gra.c_name 
group by cla.f_name 
     , gra.c_name 
     , grade 
order by cla.f_name 
     , gra.c_name; 

这给了我下面的输出:

F_NAME    C_NAME  COUNT(GRADE) G 
-------------------- ---------- ------------ - 
CORY     INSS300    4 B 
CORY     INSS300    4 C 
CORY     INSS421    1 A 
CORY     INSS421    1 C 
CORY     INSS421    1 D 
DWIGHT    INSS300    2 B 
DWIGHT    INSS300    2 C 
KEEN     FIN300    1 A 
KEEN     FIN300    1 B 
KEEN     INSS300    2 B 
KEEN     INSS300    2 C 
KEEN     INSS422    3 C 

我不知道为什么4B和4c是在即将到来输出的顶部可能性只能是2b和2c。

有什么建议吗?

回答

0

这是因为在类表,你有“重复”行了c_name和f_name,如:

C_NAME C_TIME F_NAME C_ROOM SEMESTER 
--------- -------- ------- ------- -------- 
INSS300 W5:30 CORY 219BC FALL11 
INSS300 F5:30 CORY 216BC FALL11 

在等级表INSS300每一行都将对阵那些行,导致双计数。因此,如果您的成绩表还没有注意到课程的时间,您将不得不筛选您的班级表,以便每个c_name和f_name只显示一行。

或者,您可以先将成绩表中的行分组,然后将它们返回到类表中,如果您仍然需要显示两行(尽管我不认为这将是正确的方法你试图解决的问题)。