有三个表。新闻表News N,栏目表 Items I,部门表Branch B。
关系:新闻表中有BranchId,ItemId分别对应Branch和Item表,news表里status字段不等于99表示发布数,等于1表示审核的。
要求:把所有的部门查询出来,并统计每个部门发布的新闻数(status<>99),和审核的新闻数(status=1)。且Items的Type=1
我现在只做到把所有有发布新闻数的部门查询出来,没有发布新闻的部门不知道如何查询
用B left outer join N on B.Id=N.BranchId inner join I on C.ItemId=I.Id
这样好像查询不出来
请各位指教
关系:新闻表中有BranchId,ItemId分别对应Branch和Item表,news表里status字段不等于99表示发布数,等于1表示审核的。
要求:把所有的部门查询出来,并统计每个部门发布的新闻数(status<>99),和审核的新闻数(status=1)。且Items的Type=1
我现在只做到把所有有发布新闻数的部门查询出来,没有发布新闻的部门不知道如何查询
用B left outer join N on B.Id=N.BranchId inner join I on C.ItemId=I.Id
这样好像查询不出来
请各位指教
select
B.BranchId,
sum(case when N.status <> 99 and I.type = 1 then 1 else 0 end) pub_cnt,
sum(case when N.status = 1 and I.type = 1 then 1 else 0 end) confirmed_cnt
from
Branch B
left join News N
on B.BranchId = B.BranchId
left join Items I
on N.itemId = I.itemId
group by B.BranchId
case when N.status <> 99 and I.type = 1 then 1 else 0 end
这句是什么意思啊?
from (
select b.Branch,count(*) as fb,0
from News N
left join Branch B on B.Id=N.BranchId
left join Items I on N.ItemId=I.Id
where status <> 99 and i.Type=1
group by b.Branch
union all
select b.Branch,0,count(*) as sh
from News N
left join Branch B on B.Id=N.BranchId
left join Items I on N.ItemId=I.Id
where status = 99 and i.Type=1
group by b.Branch)a
group by Branch
我加了个条件
B.Status<>99
为什么B.Status=99的数据也查询出来了啊?
我加了个条件
B.Status <> 99
为什么B.Status=99的数据也查询出来了啊?=========================================你条件加在哪里啦?
我还加了其他条件。
现在新闻表里的时间范围的可以用,
就是部门的条件好像没用
是不是因为left join?