2016-07-27 50 views
0

我需要得到新闻的数量,它给了我错误SQL服务器SELECT COUNT中加入

列“News.NewsId”在选择列表中无效,因为它不是在聚合函数或包含GROUP BY子句。

select News.NewsId 
     , News.NewsTitle 
     , COUNT(News.NewsId) as Total 
from News inner join NewsCategory on News.NewsId = NewsCategory.NewsId 
where NewsCategory.CategoryId in (Select CategoryId 
            from Category 
            where CategoryName = 'travel' 
            or CategoryName = 'Technology' 
            or CategoryName = 'Sport') 
+0

你想通过'newsid'来聚合结果吗?你是否想要返回多个记录?如果是这样,你只是缺少'group by'子句。添加到最后:'group by news.newsid,news.newstitle' ...如果没有,你应该更好地定义你的问题... – sgeddes

回答

0

采用TI这样的:

select News.NewsId, News.NewsTitle, COUNT(News.NewsId) as Total from News group by News.NewsId, News.NewsTitle 
inner join 
NewsCategory 
on News.NewsId = NewsCategory.NewsId where NewsCategory.CategoryId in (Select CategoryId from Category where CategoryName = 'travel' or CategoryName = 'Technology' or CategoryName = 'Sport')'Technology' or CategoryName = 'Sport') 

你是你唱数这就是为什么你需要按领域,包括您的计数(News.NewsId)

这一个显示根据每个NewSID的计数每个类别:

select count(1), a.NewsId, a.NewsTitle,b.category from 
(select NewsId, NewsTitle from tbl_news)as a 


left JOIN 

(select NewsId, categoryid,Category from tbl_category) as b 
on a.newsid = b.newsid GROUP BY a.NewsTitle,b.category 
+0

它的工作,谢谢:)但计数总是1,我需要获得每个类别下的计数或新闻数量。喜欢类别体育有2个新闻和类别技术有4个新闻,你能帮我解决这个问题,谢谢 – Lucy

+0

你是指每个类别的计数? –

+0

是的......非常感谢你的帮助:) – Lucy

0

你需要按列NewsIdNewsTitle

select News.NewsId 
     , News.NewsTitle 
     , COUNT(News.NewsId) as Total 
from News inner join NewsCategory on News.NewsId = NewsCategory.NewsId 
where NewsCategory.CategoryId in 
         (Select CategoryId 
         from Category 
         where CategoryName IN ('travel','Technology','Sport')) 
GROUP BY News.NewsId 
     , News.NewsTitle 

或者你可以编写查询作为

select News.NewsId 
     , News.NewsTitle 
     , COUNT(News.NewsId) as Total 
from News 
inner join NewsCategory on News.NewsId = NewsCategory.NewsId 
inner join Category  on Category.CategoryId = NewsCategory.CategoryId 
where Category.CategoryName IN ('travel','Technology','Sport')) 
GROUP BY News.NewsId, News.NewsTitle 
0

只要写这个使用两个连接和group by

select n.NewsId, n.NewsTitle, COUNT(*) as Total 
from News n inner join 
    NewsCategory nc 
    on n.NewsId = nc.NewsId join 
    Category c 
    on nc.CategoryId = c.CategoryId 
where c.CategoryName in ('travel', 'Technology', 'Sport') 
group by n.NewsId, n.NewsTitle; 
+0

它的工作,谢谢:)但计数总是1,我需要得到计数或每个类别下的新闻数量。喜欢类运动有2条新闻和类别技术有4条新闻,请你帮我解决这个问题,谢谢 – Lucy