# Complex Aggregate Query

I currently use the following query to basically show how often we win/lose/tie based on the number of points we score.

SELECT
Count(IIf((theirscore < ourscore), 1, Null)) AS WIN,
Count(IIf((theirscore > ourscore), 1, Null)) AS LOSS,
Count(IIf((theirscore = ourscore), 1, Null)) AS TIE,
ourscore
FROM game g, team t
WHERE 1=1
AND g.theirid = t.teamid
AND t.TEAMLEAGUE = 'NERF'
AND g.finalscore > 0
group by ourscore

I then paste this in Excel to calulate the win ratio for each line [WIN/(WIN+LOSS+TIE)].  I'd like to add that to the above query.  That's the easy part.  Now the hard part.  For each line item, I'd also like to include the win ratio for the line, the line above, and the line below all added together.

Here's an example of what I want to see.

SCORE   WIN   LOSS   PUSH   AVG   GRPAVG
3            1       2          0         .333     .571  <=[(1+3)/(1+3+2+1+0+0)]
6            3       1          0         .750     .600  <=[(3+1+2)/(3+1+2+1+2+1+0+0+0)]
7            2       1          0         .667     .667  <=[(2+3+1)/(2+3+1+1+1+1+0+0+0)]
9            1       1          0         .500     .600  <=[(1+2)/(1+2+1+1+0+0)]

Normally I'd loop through the result set to get this info, but I'm using an access DB via the web, so it's not quite that easy.  I know I'm forgetting some details, so if you have any questions, let me know.
###### Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
To my knowledge this can't be done unless you know the ID of the previous and next record already.

If this is the case you would have to create a function that queries the values from the specified records in your query, adds them together returns the answer you want for each row in your query.

If you want more information than this I'll try to prduce a function for you.

Regards

PF
0
Author Commented:
What do you mean by "create a function"?  In access?  Or just in the SQL statement?

This can't be done via sub-queries?
0
Commented:
All this assumes that you know the record IDs in advance i.e. record before is (say) ID - 1 and the record after is ID + 1. The function become more complex if it isn't.

You will need to create a function in access (VBA) that is called from within a SQL statement

e.g.

SELECT *, fnGRPAVG([ScoreID] -1, [ScoreID] + 1) AS GRPAVG FROM game g

This will call the fnGRPAVG function that you will have written to which will calculate the GRPAVG figure for each record.

NOTE: This will be a complex function that will contain 2 queries to retrieve that data for the record before and the record after. This information will then be used to calculate the GRPAVG amount and get passed back to your original query.

This would be an extremely difficult thing to do with sub queries as you need more than one piece of information from two other records. It will also be difficult to handle the first record where there is no "before" and the last where there is no "after".

Regards

PF
0

Experts Exchange Solution brought to you by

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

###### It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Access

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.