• Quick single scan solution

    😎

    USE tempdb;

    GO

    SET NOCOUNT ON;

    WITH XSAMPLE(book, position) AS

    (SELECT * FROM (VALUES

    ('A', 500)

    ,('B',-500)

    ,('C',-500)

    ) AS X(book, position))

    ,BALANCE_STUFF AS

    (

    SELECT

    XS.book

    ,XS.position

    ,SUM(XS.position) OVER

    (

    PARTITION BY (SELECT NULL)

    ORDER BY XS.book

    ROWS BETWEEN UNBOUNDED PRECEDING

    AND CURRENT ROW

    ) AS RT_BALANCE

    FROM XSAMPLE XS

    )

    SELECT

    BS.book

    ,BS.position

    FROM BALANCE_STUFF BS

    WHERE BS.RT_BALANCE <> 0;