#TOP 1
When selecting values that correspond to Unique fields referenced by constants (OwnerUserId), you're only really selecting one field, meaning this is redundant.
#UVN
Unexplained Variable Names
Don't use names like Q and A, they're confusing at best and unreadable at worst.
DECLARE @Q
DECLARE @A
DECLARE @Questions
DECLARE @Answers
#Yo dawg, heard you like SELECTs
SELECT --...
FROM (
SELECT TOP 1
(
SELECT UpVotes
From Users
WHERE Id = @UID
) as Upvotes,
SQL is not intended to be used like that.
You don't need to create psuedopseudo tables to select from to store your data.
You can use a base table, and then specify certain fields calling other tables from that.
SELECT
UpVotes + DownVotes as [Total Votes],
(SELECT COUNT(*) FROM Posts WHERE OwnerUserId = Users.Id) as [Post Count]
FROM Users
#Formatting
This formatting is a bit weird:
SELECT Score = Upvotes * @Up +
Downvotes * @Down +
Questions * @Q +
Answers * @A +
Comments * @Comment,
You might want to break these up a little more.
#Naming
These aren't the actual values, they're type weights, so I'd add the word weight to the end of the variable names:
DECLARE @Up int = 1
DECLARE @Down int = 2
DECLARE @Q int = 10
DECLARE @A int = 5
DECLARE @Comment int = 1
Into:
DECLARE @UpVotesWeight int = 1
DECLARE @DownVotesWeight int = 2
DECLARE @QuestionsWeight int = 10
DECLARE @AnswersWeight int = 5
DECLARE @CommentsWeight int = 1