Hi

Yeah ok this is off-topic but I thought I'd share, and a lot of us do db work

Its always aggravated me doing percentages or ratios in SQL because of the possiblility of a div 0 error (you can wrap an if or case around it sure) but if you are doing this on a aggregate/group by it gets really ugly

So....I had an epiphany moment..what does X/NULL return answer NULL! so the addition of a NULLIF() and a COALESCE() and you have it

ie

 SELECT LEFT(
   'Past 12 Months, 1st Half $'+CONVERT(VARCHAR(12),CONVERT(MONEY,SUM(CASE
     WHEN TranDate < GETDATE()-183 THEN ((DebitCredit*2)-1)*Amount
     ELSE 0
   END))) + ' -> 2nd Half $' +
   CONVERT(VARCHAR(12),CONVERT(MONEY, SUM(CASE
         WHEN TranDate < GETDATE()-183 THEN 0
         ELSE ((DebitCredit*2)-1)*Amount
      END)))
+ ' (Trend '+COALESCE(CONVERT(VARCHAR(12),
      FLOOR(
        (SUM(
          CASE
           WHEN TranDate < GETDATE()-183 THEN 0
ELSE ((DebitCredit*2)-1)*Amount END) -
        SUM(CASE
          WHEN TranDate < GETDATE()-183 THEN ((DebitCredit*2)-1)*Amount
          ELSE 0
        END))*100/NULLIF(
     (SUM(
       CASE
         WHEN TranDate < GETDATE()-183 THEN ((DebitCredit*2)-1)*Amount
        ELSE 0
       END)),0)
     ))+'%)','TBA)'),255)  AS Data
 FROM DB_Trans a
 WHERE
   a.TranDate >= GETDATE()-366 AND
   a.Source = 0
GROUP BY a.DebtorID

Any simpler solutions?



_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: [email protected]
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to [EMAIL PROTECTED] with Subject: unsubscribe

Reply via email to