2016-07-27 14 views
0

ich die Anzahl der Nachrichten erhalten müssen, es gibt mirSQL Server Wählen Sie in Join Count

Spalte ‚News.NewsId‘ Fehler ungültig ist in der Auswahlliste, weil sie in einer Aggregatfunktion nicht enthalten ist oder die GROUP BY-Klausel.

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

Möchten Sie die Ergebnisse von 'newsid' aggregieren? Bedeutung Möchten Sie mehrere Datensätze zurückgegeben? Wenn dem so ist, fehlt einfach die Klausel "Gruppieren nach". Fügen Sie das zum Ende hinzu: 'Gruppe durch news.newsid, news.newstitle' ... Wenn nicht, sollten Sie Ihre Frage besser definieren ... – sgeddes

Antwort

0

Verwendung ti wie folgt schreiben:

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') 

Du bist du singen Anzahl, die ist, warum Sie durch das Feld zu gruppieren müssen, gehören zu Ihrer count (News.NewsId)

Dieses zeigt für jede Kategorie zählen nach jedem 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

Es funktioniert, danke :) Aber die Zählung ist immer 1, ich muss Holen Sie sich die Anzahl oder die Anzahl der Nachrichten unter jeder Kategorie. wie Kategorie Sport hat 2 Nachrichten und Kategorie Technologie hat 4 Nachrichten, Können Sie mir bitte helfen, dies zu lösen, danke – Lucy

+0

Sie meinen, zählen pro Kategorie? –

+0

Ja ... Vielen Dank für Ihre Hilfe :) – Lucy

0

Sie müssen Gruppe der Spalte NewsId und NewsTitle

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 

Oder Sie können die Abfrage als

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

Schreiben Sie einfach diese mit zwei verbindet und ein 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

Es funktioniert, danke :) Aber die Zählung ist immer 1, ich muss die Anzahl oder die Anzahl der Nachrichten unter jeder Kategorie bekommen. wie Kategorie Sport hat 2 Nachrichten und Kategorie Technologie hat 4 Nachrichten, Können Sie mir bitte helfen, dies zu lösen, Danke – Lucy