Hi Joel,
Thank you for the answer. I'm getting a little confused with the logic and I was wondering if you could help me finish it off please.I used the left outer join on the query for two reasons:
1. I needed the presenterName, presenterGender,PresenterID to display the details even if they had zero votes.
2. I needed to distinguish between the genders male / female
The top part of the query that tallys the votes is working ok but I need a little help with the second half if you have the time.
Sean thanks in advance
!---------table presenters
CREATE TABLE [dbo].[tblPresenters](
[presenterID] [int] IDENTITY(1,1) NOT NULL,
[presenterName] [varchar](150) COLLATE Latin1_General_CI_AS NULL,
[presenterProfile] [text] COLLATE Latin1_General_CI_AS NULL,
[presenterGender] [nchar](10) COLLATE Latin1_General_CI_AS NULL,
[presenterAttribution] [varchar](250) COLLATE Latin1_General_CI_AS NULL,
[presenterCreated] [datetime] NULL,
[presenterLargeImage] [varchar](250) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
!------ table with votes
!--------------------------------------
declare @Gender varchar(20)
set @Gender = 'female'
DECLARE @TotalVotes int
SELECT @TotalVotes = SUM(CASE WHEN VoteFor = 1 THEN 1
WHEN VoteAgainst = 1 THEN -1
ELSE 0
END)
from dbo.tblPresenters a
left outer JOIN dbo.tblCompWeek_02 pr
ON a.PresenterID = pr.PresenterID
WHERE PresenterGender=@Gender
SELECT
pr2.presenterName,
V.PresenterID,
V.VoteFor,
CAST(V.VoteFor * 1.00 / @TotalVotes as Decimal(3,2)) as VotePercentage
FROM (--get votes for presenter
SELECT
pr2.PresenterID,
SUM( CASE WHEN VoteFor = 1 THEN 1 WHEN VoteAgainst = 1 THEN -1 ELSE 0 END) as Votes
FROM dbo.tblCompWeek_02 q
left outer JOIN dbo.tblPresenters pr2
ON q.PresenterID = pr2.PresenterID
WHERE pr2.PresenterGender=@Gender
GROUP BY
q.PresenterID,pr2.PresenterID,pr2.PresenterGender) V