Re: group by help please!

From: Charles Hooper <hooperc2000_at_yahoo.com>
Date: Fri, 4 Jan 2008 05:30:54 -0800 (PST)
Message-ID: <b3544d5d-4b79-4556-984e-798626b7bb90@x69g2000hsx.googlegroups.com>


On Jan 4, 7:46 am, Totti <saliba.toufic.geo..._at_gmail.com> wrote:
> hi all i have the following formula, it is giving me 70% of the result
> i want would you please check where the mistake might be?
>
> the formula is :
>
> SELECT TO_CHAR(purinv.Inv_Date,'mm')
> MONTH ,TO_CHAR(purinv.Inv_Date,'YYYY') YEAR,
> (case when purch.Prod_Code = 'SP-20.2' then sum(purch.qty) else 0 end)
> as "SP-20.2",
> (case when purch.Prod_Code = 'SP-20.1' then sum(purch.qty) else 0 end)
> as "SP-20.1",
> (case when purch.Prod_Code = 'SP-20.6' then sum(purch.qty) else 0end)
> as "SP-20.6"
> from purinv, purch
> where purinv.Code = purch.Inv_Code and purch.Prod_Code in ('SP-20.2',
> 'SP-20.1', 'SP-20.6')
> group by
> TO_CHAR(purinv.Inv_Date,'mm') ,TO_CHAR(purinv.Inv_Date,'YYYY') ,purch.Prod_Code
> order by
> TO_CHAR(purinv.Inv_Date,'mm') ,TO_CHAR(purinv.Inv_Date,'YYYY')
> ***************************************************************************­********************************
> the result i am getting:
>
> MO YEAR    SP-20.2    SP-20.1    SP-20.6
> -- ---- ---------- ---------- ----------
> 01 1998          0        140          0
> 01 1998        400          0          0
> 01 1998          0          0         80
> 01 1999          0          0         89
> 02 1999          0        163          0
> 02 1999        456          0          0
> 02 1999          0          0         86
> 03 1998          0          0         99
> 03 1999          0          0         81
> 04 1998          0        163          0
> ***************************************************************************­******************************
> the result i want :
> is to gather all 1998 for sp.20.2 lets say in one, so on so forth ,
> what shoul be changed in the formula please?
>
> the result i want is like such:
> first everything in 1998, then 1999
>
> Month Year    SP-20.2    SP-20.1    SP-20.6
> ----- ---- ---------- ---------- ----------
>    01 1998        400        140         80
>    02 1998          0          0          0
>    03 1998          0          0         99
>    04 1998          0        163          0
>    05 1998        420          0         90
>    06 1998          0          0          0
>    07 1998          0        155         88
>    08 1998          0        151         85
>    09 1998        481        145         81
>    10 1998          0          0          0
>    11 1998          0          0        110
>    12 1998          0          0          0
>    01 1999          0          0         89
>    02 1999        456        163         86
>    03 1999          0          0         81
>    04 1999          0          0          0
>
> any help appreciated, thank you all

I suspect that it is the inclusion of "purch.Prod_Code" in the GROUP BY clause that is causing the problem.

This:
(case when purch.Prod_Code = 'SP-20.2' then sum(purch.qty) else 0 end) as "SP-20.2",

May be rewritten as:
SUM(DECODE(PURCH.PROD_CODE,'SP-20.2',PURCH.QTY,0)) AS "SP-20.2" By making similar changes to the other columns that are returned, you would be able to remove "purch.Prod_Code" from the GROUP BY clause.

Charles Hooper
IT Manager/Oracle DBA
K&M Machine-Fabricating, Inc. Received on Fri Jan 04 2008 - 07:30:54 CST

Original text of this message