Oma - Create a view that calculates all but the percentage, and use it as the source 
for the percentage calculation. That will get around the internal troubles.

CREATE VIEW vwFirstView AS +
select custno, sum(monsales) as Sales,sum(moncost) as +
Cost,(sum(monsales)-sum(moncost)) as Profit +
from test1 group by custno

SELECT CustNo=8, Sales=8, Cost=8, Profit=8, +
(ifeq(Sales,0,0,(Profit/Sales))) as Percent +
FROM vwFirstView





>
"Sami Aaron" <[EMAIL PROTECTED]> wrote:

>Oma -
>
>I'll gladly take your $10 for Project Bundle-Up ...
>
>And here's a thought about your statement in general - and I may be way off
>base, but ...
>
>I think you have a logic flaw. �You're basing the IFEQ portion on the result
>of a value that can only be evaluated AFTER the GROUP BY portion has been
>run, but you are attempting to display the results BEFORE THE group by.
>
>Re-phrased - my understanding of the SELECT ... GROUP BY syntax requires
>that the values that are collected to the left of the GROUP by are based on
>a row-by-row evaluation of the data in the table. �By attempting to place
>the IFEQ in this group, you are trying to force the results of the GROUP BY
>to be evaluated on a row-by-row basis - but it's impossible until it has
>completed all the rows in the group.
>
>Anyway - that's all the brain power I have left for the morning ...
>
>Sami
>
>-----------------------------------------------------------
>Sami Aaron
>Software Management Specialists
>19312 W 63rd Terr
>Shawnee KS �66218
>913-915-1971
>http://www.softwaremgmt.com
>
>
>
>----- Original Message -----
>From: "Oma Cox" <[EMAIL PROTECTED]>
>To: "RBASE-L Mailing List" <[EMAIL PROTECTED]>
>Sent: Thursday, January 09, 2003 6:58 AM
>Subject: [RBASE-L] - Re: Just some I wanted to share! OOPS
>
>
>Ok I posted my results before I did enough testing (some times
>excitement of getting it to work blinds you from the truth!)!
>ASSUMED the answer was correct because the error went away!
>After checking further there is no way to trap for a division by zero
>I'll put $10 bucks up for this DUH Sami!
>You can get profit percentage two ways
>Sales - cost = profit
>
>Profit/sales = %
>Or
>(Sales/profit)^-1 = %
>
>The IFEQ function doesn't not handle this issue well!
>
>(ifeq(sum(monsales),0,0,((sum(monsales)-sum(moncost))/(sum(monsales))
>
>Someone please check my logic on this!
>
>If sum(monsales) = 0 then
>Set value = 0
>Else
>Set Value = ((sum(monsales)-sum(moncost))/(sum(monsales))
>endif
>
>The expression ((sum(monsales)-sum(moncost))/(sum(monsales)) is
>evaluated before the condition is checked! So if you have a denominator
>in your formula that equals zero (through a sum) then you'll get a
>Divide by Zero error!
>
>Is there away round this! Someone please set me straight!
>
>The expressions within the IFEQ function should be evaluated upon
>satisfaction of the condition not before!
>
>The select statement can have monsales equal zero due to credits applied
>to that customer and profit (monsales-moncost) can equal zero too (very
>rare) so it doesn't matter which denominator is used or method noted
>above to calculate profit percentage! You will still get an error
>message some where down the line.
>
>Am I over reacting about this!
>
>I know that you could add a column to the table to compute the profit
>percentage but if you are using the sum you can not sum or avg the
>precent oolumn! So this option won't work using the select?
>
>Which I've done in my example below!
>
>
>Best regards,
>
>Oma
>
>
>Example
>
>SET QUOTES=NULL
>SET QUOTES='
>SET DELIMIT=NULL
>SET DELIMIT=','
>SET LINEEND=NULL
>SET LINEEND='�'
>SET SEMI=NULL
>SET SEMI=';'
>SET PLUS=NULL
>SET PLUS='+'
>SET SINGLE=NULL
>SET SINGLE='_'
>SET MANY=NULL
>SET MANY='%'
>SET IDQUOTES=NULL
>SET IDQUOTES='`'
>SET CURRENCY '$' PREF 2 B
>DISCONNECT
>SET STATICDB OFF
>SET ROWLOCKS ON
>SET FASTLOCK ON
>CREATE SCHEMA AUTHOR test1 public
>CREATE TEMPORARY TABLE `test1` �+
>(`custno` TEXT � �(8) , �+
> `monsales` CURRENCY , �+
> `moncost` CURRENCY , �+
> `monprofit`= +
> (monsales-moncost) CURRENCY , �+
> `monprecent`= +
> (monprofit/monsales) DOUBLE � )
>SET CASE OFF
>SET AUTOSKIP ON
>SET REVERSE ON
>SET BELL OFF
>SET NULL '-0- '
>SET DATE YEAR 30
>SET DATE CENTURY 19
>SET DATE SEQUENCE MMDDYYYY
>SET TIME SEQUENCE HHMMSS
>SET TOLERANCE 0.
>SET ZERO ON
>LOAD `test1`
>NONUM
>'100',100.00,50.00
>'100',100.00,100.00
>'100',-200.00,-150.00
>'120',100.00,60.00
>'120',-80.00,-60.00
>'130',134.00,54.00
>'130',-134.00,48.00
>'140',100.00,50.00
>'140',150.00,45.00
>END
>SET DATE FORMAT 'MM/DD/YYYY'
>SET TIME FORMAT 'HH:MM'
>SET DATE SEQUENCE MMDDYY
>SET TIME SEQUENCE HHMMSS
>COMMENT ON TABLE `test1` IS +
>'Testing of Divide by Zero'
>
>-- get divided by zero error
>select custno=8 as CustNo, sum(monsales)=8 as Sales,sum(moncost)=8 as
>Cost,(sum(monsales)-sum(moncost))=8 as Profit,
>(ifeq(sum(monsales),0,0,((sum(monsales)-sum(moncost))/(sum(monsales))
>)))=8 as Precent from test1 group by custno
>
>


-- 
Albert Berry
Full Time Consultant to
PSD Solutions
350 West Hubbard, Suite 210
Chicago, IL 60610
312-828-9253 Ext. 32


__________________________________________________________________
The NEW Netscape 7.0 browser is now available. Upgrade now! 
http://channels.netscape.com/ns/browsers/download.jsp 

Get your own FREE, personal Netscape Mail account today at http://webmail.netscape.com/

Reply via email to