title: Make this function return distinct results
body: <p>Alright, so I know this is a large Procedure, but my question is very simple.  I am trying to get a single instance of a Bond from this, but it is giving me each instance times the number of users in the system related to the agency since I am an administrator.  This happens at the bottom where the OR EXISTS statement is.  I just need help figuring out how to limit the results down to 1 of each bond while still getting the correct results for the amounts needed, which is why the individual join statements are necessary.</p>
  
  <pre><code>ALTER PROCEDURE dbo.GetBondAmounts
      (
      @Username varchar(20)
      )
  AS
      SELECT Bond.ID BondID, (ISNULL(Powers.Amount,0) + ISNULL(Charges.Amount,0)) BondAmount,
      (ISNULL(BondFee.Amount,0) + ISNULL(Powers.Premium,0) + ISNULL(Charges.Premium,0)
      + ISNULL(Forfeiture.CostOfApprehension,0) + ISNULL(Forfeiture.AmountPaid,0) + Bond.StateTax) BondTotal,
      (ISNULL(BondFee.Amount,0) + ISNULL(Powers.Premium,0) + ISNULL(Charges.Premium,0)
      + ISNULL(Forfeiture.CostOfApprehension,0) + ISNULL(Forfeiture.AmountPaid,0) + Bond.StateTax
      - ISNULL(BalanceForgiveness.Amount,0) - ISNULL(Payment.Amount,0)) BondBalance
      FROM Bond
      LEFT OUTER JOIN UserAgency ON Bond.Agency = UserAgency.Agency
      LEFT OUTER JOIN
      (
          SELECT BondID, SUM(AmountForgiven) Amount
          FROM BalanceForgiveness
          GROUP BY BondID
      ) AS BalanceForgiveness ON Bond.ID = BalanceForgiveness.BondID
      LEFT OUTER JOIN
      (
          SELECT Bond, SUM(Amount) Amount
          FROM BondFee
          GROUP BY Bond
      ) AS BondFee ON Bond.ID = BondFee.Bond
      LEFT OUTER JOIN
      (
          SELECT Powers.Bond, SUM(Charge.BondAmount) Amount,
          ISNULL(SUM(Charge.BondPremium), 0) Premium
          FROM Powers INNER JOIN Charge ON Powers.Surety = Charge.PowerSurety
          AND Powers.PowerPrefix = Charge.PowerPrefix AND Powers.PowerNumber = Charge.PowerNumber
          GROUP BY Bond
      ) AS Powers ON Bond.ID = Powers.Bond
      LEFT OUTER JOIN
      (
          SELECT BondID, SUM(BondAmount) Amount, SUM(BondPremium) Premium
          FROM ChargeWithoutPower
          GROUP BY BondID
      ) AS Charges ON Bond.ID = Charges.BondID
      LEFT OUTER JOIN
      (
          SELECT Bond, SUM(CostOfApprehension) CostOfApprehension, SUM(AmountPaid) AmountPaid
          FROM Forfeiture
          GROUP BY Bond
      ) AS Forfeiture ON Bond.ID = Forfeiture.Bond
      LEFT OUTER JOIN
      (
          SELECT Bond, SUM(Amount) Amount
          FROM Payment
          GROUP BY Bond
      ) AS Payment ON Bond.ID = Payment.Bond
      WHERE UserAgency.Username = @Username
      OR EXISTS (SELECT * FROM Users WHERE Username = @Username AND Admin = 1)
  </code></pre>