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:
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:
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