title: t-SQL to find Top 10 Records for Each Group
body: <p>I am trying to figure out how to return the top 10 records for each group of Trans.TranSID.</p>
  
  <pre><code>SELECT a.ABID, a.ABName, t.TranSID, SUM(IIF(TranTypeID = 'CO', td.Qty * CAST(td.Price AS money) * - 1, 
                        td.Qty * CAST(td.Price AS money))) AS TotalSales
  FROM         Trans t INNER JOIN
                        TransDetail td ON t.TranID = td.TranID INNER JOIN
                        ABook a ON t.TranABID = a.ABID
  WHERE     (t.TranDate BETWEEN CONVERT(DATETIME, '2012-01-01 00:00:00', 102) AND CONVERT(DATETIME, '2013-01-01 00:00:00', 102)) AND 
             t.TranTypeID in ('SO','CA','CO') AND (t.TranStatus &lt;&gt; 'V')
  GROUP BY a.ABID, a.ABName, t.TranSID
  HAVING  (NOT (a.ABName LIKE '%cash%'))
  ORDER BY t.TranSID, TotalSales Desc
  </code></pre>
  
  <p>I can add "TOP 10" to the select statement, but that gives me the top 10 accounts regardless of the group.  There are 25 groups of Trans.TranSID and I'm trying to get the top 10 only for each group.  </p>