The obvious solution would normally be the use of analytical functions to limit the number of table reads to just one.
But SQLServer does not support
Count(Distinct foo) over (Partition By Bar Order by Foobar)
Luckily there's a workaround:
SELECT
DENSE_RANK() over (order by [BusinessUnit] ASC) + DENSE_RANK() over (order by [BusinessUnit] DESC) - 1 As [No. of Buss Unit],
DENSE_RANK() over (order by [Segment] ASC) + DENSE_RANK() over (order by [Segment] DESC) - 1 As [No. of Segments],
DENSE_RANK() over (order by [Vendor] ASC) + DENSE_RANK() over (order by [Vendor] DESC) - 1 As [No. of Vendors],
DENSE_RANK() over (order by [Payment] ASC) + DENSE_RANK() over (order by [Payment] DESC) - 1 As [No. of Payments],
DENSE_RANK() over (order by [Payee] ASC) + DENSE_RANK() over (order by [Payee] DESC) - 1 As [No. of Payees],
DENSE_RANK() over (order by [Country] ASC) + DENSE_RANK() over (order by [Country] DESC) - 1 As [No. of Countries],
Avg([Amount]) As [Avg Payment Amount],
Min([Amount]) As [Min Payment Amount],
Max([Amount]) As [Max Payment Amount],
Sum([Amount]) As [Total Payment Amount],
Min([Date]) As [Min Date],
Max([Date]) As [Max Date],
Min([CPI]) As [Minimum CPI Score],
Max([CPI]) As [Maximum CPI Score]
FROM [Table1]