我有两张桌子TEILNEHMERKURS和KURS。
航向对接:
| Bezeichnung | | ---------------- | | Java Programming | | Java Programming | | Database |
和第二个表TEILNEHMERKURS
| Bezeichnung | | ---------------- | | Database | | Java Programming | | Database |
我需要一个Statment来生成以下输出:
| Bezeichnung | Count in Table Kurs |Count in Table Teilnehmerkurs | ---------------- |-------------------- |----------------------------- | Database | 1 |2 | Java Programming | 2 |1
我尝试了以下声明:
select k.bezeichnung, count(k.bezeichnung), count(tk.bezeichnung)
from kurs k
left join teilnehmerkurs tk on tk.kursnr = k.kursnr
group by k.bezeichnung;
我的实际输出是:
| Bezeichnung | Count in Table Kurs |Count in Table Teilnehmerkurs | ---------------- |-------------------- |----------------------------- | Database | 2 |2 | Java Programming | 2 |1
答案 0 :(得分:1)
您可以在FULL JOIN
之后单独使用group by
。
DECLARE @Kurs TABLE ( Bezeichnung VARCHAR(50))
INSERT INTO @Kurs VALUES
('Java Programming'),
('Java Programming'),
('Database')
DECLARE @TEILNEHMERKURS TABLE( Bezeichnung VARCHAR(50))
INSERT INTO @TEILNEHMERKURS VALUES
('Database'),
('Java Programming'),
('Database')
SELECT COALESCE(K.Bezeichnung, T.Bezeichnung) Bezeichnung
, K.[Count in Table Kurs]
, T.[Count in Table Teilnehmerkurs]
FROM
(SELECT Bezeichnung, COUNT(*) [Count in Table Kurs] FROM @Kurs GROUP BY Bezeichnung ) K
FULL JOIN
(SELECT Bezeichnung, COUNT(*) [Count in Table Teilnehmerkurs] FROM @TEILNEHMERKURS GROUP BY Bezeichnung) T
ON K.Bezeichnung = T.Bezeichnung
结果:
Bezeichnung Count in Table Kurs Count in Table Teilnehmerkurs
-------------------- ------------------- -----------------------------
Database 1 2
Java Programming 2 1
答案 1 :(得分:0)
这可能很棘手。一个非常简单的方法是union all
和group by
:
select Bezeichnung, sum(inkurs), sum(inTeilnehmerkurs)
from ((select Bezeichnung, count(*) as inkurs, 0 as inTeilnehmerkurs
from kurs
group by Bezeichnung
) union all
(select Bezeichnung, 0 as inkurs, count(*) as inTeilnehmerkurs
from Teilnehmerkurs
group by Bezeichnung
)
) kt
group by Bezeichnung;
如果您使用join
将结果合并在一起,那么您必须小心在两个表中都缺少Bezeichnung
。如果您使用full outer join
,则需要使用coalesce()
。
答案 2 :(得分:0)
您可以使用select union从表格中获取所有Bezeichnung然后左边加入计数
select t.Bezeichnung, tk.count_in_kurs, tt.count_in_teilnehmerkurs
from (
select Bezeichnung
from Kurs
union
select Bezeichnung
from TEILNEHMERKURS)
left join (
select Bezeichnung, count(*) as count_in_kurs
from kurs
group by Bezeichnung
) tk on t.Bezeichnung = tk.Bezeichnung
left join (
select Bezeichnung, count(*) as count_in_TEILNEHMERKURS
from kurs
group by Bezeichnung
) tt on t.Bezeichnung = tt.Bezeichnung