Trying to calculate a percentage in an access query.

I am returning a few lines of data from my table. Each has an amount associated with it. I just want to return the selected items (through criteria on field [Seq]), then in another calculated field I'm trying to calculate each amount divided by the sum of specific amounts.

Here is a screenshot of what I'm trying to do;

Here is that formula again;
Percentage: [LineItem]/(Sum(IIf([Seq]="1",[Amount],0))+Sum(IIf([Seq]="2",[Amount],0)))

When I try to run this I get the following error;
Thanks for looking!
Jarred MeyerProduction ManagerAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

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.

Michael CarrilloInformation Systems ManagerCommented:
The first thing I have noticed is that you should select 'expression' for the table on the Percentage calculated field.

On the line directly below your formula click the empty field and select 'expression'.
Jarred MeyerProduction ManagerAuthor Commented:
This is not a totals query.. I don't have a dropdown where I can select expression:
Michael CarrilloInformation Systems ManagerCommented:
As soon as you use 'Sum' this query became an aggregation query.
Big Business Goals? Which KPIs Will Help You

The most successful MSPs rely on metrics – known as key performance indicators (KPIs) – for making informed decisions that help their businesses thrive, rather than just survive. This eBook provides an overview of the most important KPIs used by top MSPs.

Michael CarrilloInformation Systems ManagerCommented:
You can make this a totals query and for the fields that you are not totaling, you could make them where clauses that are visible and the value is not null.
Jarred MeyerProduction ManagerAuthor Commented:
I think I see what you were saying.. I had to manually click the Totals button in order for the drop down to show up.   Now I'm getting a data mismatch error.. Not sure why that is though..
Jarred MeyerProduction ManagerAuthor Commented:
I did just correct my Percentage formula.. It was using the incorrect field.. Should have been;

Percentage: [Amount]/(Sum(IIf([Seq]="1",[Amount],0))+Sum(IIf([Seq]="2",[Amount],0)))

Turns out this doesn't do what I want though.. It is not doing a sum of every line like I thought it would.
Michael CarrilloInformation Systems ManagerCommented:
There is a problem.

If Amount is a number, say 50.
and the Seq = 1 then you would
calculate 50/0.  You cannot divide by zero.  that will throw an error.

Your If statement looks like it may be wrong.

if  seq=1
then Amount
Else 0

if seq=2
then amount
else 0

you are not summing anything.
Jarred MeyerProduction ManagerAuthor Commented:
Any idea how to get each line being returned by the query to divide by the sum of several lines of data? I thought that's what  Sum(IIf([Seq]="1",[Amount],0))+Sum(IIf([Seq]="2",[Amount],0))) was going to do for me.
Michael CarrilloInformation Systems ManagerCommented:
The syntax for IIF is

IIF( condition, True, False)

What you did is string several IIF statements together, but they don't sum.

It looks like you truly do want to do a totals query. So you need to group off one or more of your fields.  Then you would have a simple sum that you could use in your percentage calculation.
Michael CarrilloInformation Systems ManagerCommented:
When you are trying to total the amounts for the percentage.  What characterizes that group of records together? Are they the same Category?
Jarred MeyerProduction ManagerAuthor Commented:
In this case yes they are the same category.. I'm putting a quick screenshot together that will better represent the output I'm trying to get.
Jarred MeyerProduction ManagerAuthor Commented:
Okay.. Maybe this will help identify what I'm trying to accomplish.. This is a screenshot of the exact output I'm trying to get to.. Is this possible in one query?

Michael CarrilloInformation Systems ManagerCommented:
I think I have a solution:

For the percentage you will do a sub query as follows:

Seq                              Category      LineItem    Amount  PPAmount
criteria >=1 and <=3

as you had before.  But for Percentage:

Percentage: [Amount]/(select sum([Amount]) from qryCSLPL where [Seq] in("1", "2"))

Experts Exchange Solution brought to you by

Your issues matter to us.

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

Start your 7-day free trial
Jeffrey CoachmanMIS LiasonCommented:

Is it a coincidence that the sum of 1 and 2 is the same as the total for 3?

Are all the percentages supposed to be *Only* compared to the total of 1 and 2 as a percent?
(ex: 4 is 133% of one and two.)

In other words can you post more sample data, and make it more "random".

As always a sample DB is always much clearer.

If your goal here is to simply calculate the percentage that each line item is of the total then you can try something like this:

Create a public function in a module:
Public Function GetPercent(Amount As Currency) As Double
Dim dblTotal As Double
    dblTotal = DSum("Amt", "YourTable")
    GetPercent = Amount / dblTotal
End Function

Then call this in your query as a new field:
SELECT YourTable.ID, YourTable.Cat, YourTable.Item, YourTable.Amt, GetPercent([Amt]) AS PCT
FROM YourTable;
Jarred MeyerProduction ManagerAuthor Commented:
This was perfect! Sorry I'm just getting back to you on this. Boag, give me a second and I'll follow up and explain.
Jarred MeyerProduction ManagerAuthor Commented:
Boag, It was just a coincidence that those number equaled out the way they did. I didn't want it to appear that I was just taking the percentage by the sum of only the visible lines in the query and that they may come from other lines as well. My end query for this one was actually including the sum of Seq 1,2,3 & 4 but that wasn't going to be the case on the next one.

Thanks for your help though! Your always very good at guiding me to a better description of my problems so I can get through these :)
Jeffrey CoachmanMIS LiasonCommented:
No problem, again, as long as you got the solution you needed, then it's all good...
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.