• The Preagg query is just counting the total number or records per dealer in table 2.

    I switched the inner join to a left outer join and got some crazy results. The only thing I can think of to correct it is to do this:

    SELECT

    DealerId,

    COUNT(RepairID) AS 'RepairsForThisDealer'

    INTO

    #temp

    FROM

    #Table1

    GROUP BY

    DealerId

    ;WITH

    Preagg AS (

    SELECT

    d.DealerID,

    Tire,

    COUNT(r.RepairID) AS RepairsOfThisTyre,

    RepairsForThisDealer

    FROM

    #Table1 d

    INNER JOIN #Table2 r ON r.RepairID = d.RepairID

    INNER JOIN #temp t ON t.DealerId = d.DealerId

    GROUP BY d.DealerID, Tire, RepairsForThisDealer

    ),

    FinalAgg AS (

    SELECT DealerID, Tire, RepairsOfThisTyre, RepairsForThisDealer,

    x.PCT,

    q = SUM(x.PCT) OVER(PARTITION BY DealerID ORDER BY x.PCT DESC, Tire),

    rn = ROW_NUMBER() OVER(PARTITION BY DealerID ORDER BY RepairsOfThisTyre DESC)

    FROM Preagg

    CROSS APPLY (SELECT PCT = (RepairsOfThisTyre*100.00)/RepairsForThisDealer) x

    )

    SELECT f.*

    FROM FinalAgg f

    CROSS APPLY (

    SELECT TOP 1 *

    FROM FinalAgg fi

    WHERE fi.DealerID = f.DealerID

    AND q >= 80

    ORDER BY rn

    ) x

    WHERE f.rn <= x.rn

    ORDER BY f.DealerID, f.RepairsOfThisTyre DESC

    I get the correct percents, but now it doesn't show dealer 2.