0

我有一个 SQL 问题。我的查询看起来像:

Select 
    s.idseminar, count(p.seminar)
From 
    Seminar as s 
LEFT OUTER JOIN 
    Predbiljezba AS p ON p.seminar = s.idSeminar 
WHERE 
    p.obradjena = 1
Group by 
    s.idSeminar


idseminar: 1, 2
count....: 2, 2

它应该显示课程(研讨会)的已接受申请数量(predbiljezba具有obradjena = 1<== 已接受状态)。它几乎可以满足我的需要。

我想要的是它显示所有课程,即使接受的订阅数量为 0。如果我省略 where 子句:

Select 
    s.idseminar, count(p.seminar)
From 
    Seminar as s 
LEFT OUTER JOIN 
    Predbiljezba AS p ON p.seminar = s.idSeminar
Group by 
    s.idSeminar


idSeminar: 1,2,3,4       
count....: 2,2,1,0

即使它有 0 个申请,它也会显示所有课程,但在这些申请中,有一些未处理或被拒绝,我不希望它们在我的查询中弹出。我找到了这个链接

在 SQL Server 中显示 COUNT = 0 的行

但那里的解决方案似乎不起作用。我正在使用 SQL Server 2012。

4

2 回答 2

1

将条件移动到 LEFT JOIN

Select s.idseminar, count(p.seminar)
From Seminar as s
LEFT OUTER JOIN Predbiljezba AS p ON p.seminar = s.idSeminar AND p.obradjena = 1
Group by s.idSeminar
于 2012-11-11T21:22:06.653 回答
0

您可以在主选择子句中使用子选择

Select s.idseminar, 
   (select count(p.seminar) 
   from Predbiljezba p
   where p.seminar = s.idSeminar and p.obradjena = 1) as seminarCount
from Seminar s
于 2012-11-11T23:14:17.960 回答