SQL在一个查询中包含两个多行计数

SQL在一个查询中包含两个多行计数,sql,count,Sql,Count,我有两个问题: select m.name, count(distinct a.kursnr) from trainer t left outer join mitarbeiter m on t.svnr = m.svnr left outer join einzeltraining e on t.svnr = e.trainer left outer join abhaltung a on t.svnr = a.trainer group by m.name, t.svnr; se

我有两个问题:

select m.name, count(distinct a.kursnr)
from trainer t
left outer join mitarbeiter m 
on t.svnr = m.svnr 
left outer join einzeltraining e 
on t.svnr = e.trainer
left outer join abhaltung a 
on t.svnr = a.trainer 
group by m.name, t.svnr;

select m.name, count(e.trainer)
from trainer t 
left outer join mitarbeiter m 
on t.svnr = m.svnr
left outer join einzeltraining e 
on e.trainer = t.svnr 
group by m.name, e.trainer;

第一个返回正确的课程数(Kursr),第二个返回正确的培训师举办的个别课程数(einzeltraining)。但是,我不能用一条SQL语句在一个表中同时显示两个值。任何帮助都将不胜感激。谢谢。

虽然可能有一种更有效的方法来实现这一点,但我想向您展示一种简单的方法,可以将共享一个公共字段的任意两个查询组合起来,例如:

select coalesce(q2.name, q1.name) As Name, q1.KursnrCount, q2.TrainerCount
from 
(   --original first query
    select m.name, count(distinct a.kursnr) as KursnrCount
    from trainer t
    left outer join abhaltung a 
    on t.svnr = a.trainer 
    left outer join mitarbeiter m 
    on t.svnr = m.svnr 
    left outer join einzeltraining e on svnr = e.trainer
    group by m.name, t.svnr
) q1
full join 
(   --original second query
    select count(e.trainer) as TrainerCount, m.name
    from trainer t 
    left outer join einzeltraining e 
    on e.trainer = t.svnr 
    left outer join mitarbeiter m 
    on t.svnr = m.svnr
    group by e.trainer, m.name
) q2 on q2.name = q1.name

您还可以使用内部联接或左联接,而不是完全联接,这取决于这些查询中的名称字段如何匹配。

您不能将第二个联接的顺序更改为“命名”、“计数”(e.trainer),然后使用UNION将结果联接在一起吗?这似乎不起作用,因为值显示在一列中,但是我想要两列。请将表别名添加到列中——特别是在ON和GROUP BY子句中!如果我们知道每列来自哪些表,可能会有所帮助。您可以帮助我们指出这一点的一种方法是保持一致,并对查询中的每个列引用使用
alias.column
表单。谢谢您的评论。我已经添加了它们。