Comment puis-je get le nombre de lignes "roll-up" à inclure dans chaque ligne GroupBy'd (SQL Server)?

J'ai cette requête:

SELECT TOP 8 M.membername, P.MemberNo FROM prosql05.bidata.dbo.priceexceptionhistorycsr P JOIN prosql05.cpsdata.dbo.members M ON P.memberno = M.memberno WHERE invoicedate BETWEEN '2016-09-04' AND '2016-09-10' ORDER BY invoicedate 

… qui me donne des résultats de données tels que:

entrez la description de l'image ici

Et j'ai cette requête:

 SELECT TOP 8 M.membername, P.MemberNo FROM dbo.priceexceptionhistorycsr P JOIN cpsdata.dbo.members M ON P.memberno = M.memberno WHERE invoicedate BETWEEN '2016-09-04' AND '2016-09-10' and unit = 'FOODBUY' GROUP BY M.membername, P.Memberno order by m.membername 

… qui regroupe les noms de membres, de sorte que j'obtiens:

entrez la description de l'image ici

Ce dont j'ai besoin, c'est le nombre de lignes représentées dans chaque rangée groupée; IOW, pour datatables ci-dessus, j'ai besoin de voir:

 MemberName MemberNo Count ---------- -------- ----- Freedom Fresh 110 1 FSA Loveland 028 3 

Comment puis-je l'get?

Ajoutez simplement Count Aggregate dans Select

 select MemberName, MemberNo, count(1) as [Count] From ( --your existing query without Group by ) A Group by MemberName, MemberNo 

Peut-être que cela peut être simplifié comme ça

 SELECT TOP 8 M.membername, M.MemberNo, Count(1) as [Count] FROM dbo.priceexceptionhistorycsr P JOIN cpsdata.dbo.members M ON P.memberno = M.memberno WHERE invoicedate BETWEEN '2016-09-04' AND '2016-09-10' and unit = 'FOODBUY' GROUP BY M.membername, M.Memberno order by m.membername 

En outre pour améliorer la performance, nous pouvons append un index non cluster

 CREATE NONCLUSTERED INDEX IX_members_invoicedate_unit ON cpsdata.dbo.members (invoicedate,unit) include (membername,MemberNo) 

Above Index considère invoicedate , les colonnes unit proviennent de la table cpsdata.dbo.members . Si non, veuillez préciser pour apporter les changements requirejs