RE: a DIFFERENT sql question

2003-03-14 Thread Aponte, Tony
Title: RE: a DIFFERENT sql question






SELECT DISTINCT 

t1.category CAT

,t2.type TYP

,SUM(DISTINCT t1.amount1) OVER(PARTITION BY t1.category) Sum1

,SUM(t2.amount2) OVER(PARTITION BY t1.category, t2.type) Sum2

FROM

t1

,t2

WHERE

t1.mykey1 = t2.mykey1

/


CAT TYP SUM1 SUM2

AA x 8 27

AA y 8 6

AA z 8 10

BB y 50 27



HTH

Tony APonte

Home Shopping Network



-Original Message-

From: STEVE OLLIG [mailto:[EMAIL PROTECTED]]

Sent: Thursday, March 13, 2003 2:24 PM

To: Multiple recipients of list ORACLE-L

Subject: RE: a DIFFERENT sql question



ok - i came up with a solution. but in real life i have a lot of amount1's

in t1 so it becomes an ugly brute force looking query. anybody have a more

elegant solution?



 1 select a.category

 2 , (select sum(s.amount1) from t1 s where a.category = s.category)

as amount1sum

 3 , b.type

 4 , sum(b.amount2)

 5 from t1 a

 6 , t2 b

 7 where a.mykey1 = b.mykey1

 8 group by

 9 a.category

10* , b.type

SQL /


CATEG AMOUNT1SUM TYPE SUM(B.AMOUNT2)

- -- - --

AA 8 x 27

AA 8 y 6

AA 8 z 10

BB 50 y 27


4 rows selected.


SQL 


-Original Message-

Sent: Thursday, March 13, 2003 10:49 AM

To: Multiple recipients of list ORACLE-L



since we're having fun with SQL today - here's one that's hurting my brain

at the moment. I need to sum columns at 2 different groupings in my

resultset. The first select is perfect; the 2nd is where i have trouble;

but i know i can do stuff like the 3rd example. How do I get the 2nd one to

work?


SQL SCRIPT:

drop table t1;

drop table t2;

create table t1 (mykey1 number(5), category varchar2(5), amount1 number(5));

create table t2 (mykey2 number(5), mykey1 number(5), type varchar2(5),

amount2 number(5));

insert into t1 values (1, 'AA', 5);

insert into t1 values (2, 'AA', 3);

insert into t1 values (3, 'BB', 50);

insert into t2 values (1, 1, 'x', 1);

insert into t2 values (2, 1, 'x', 2);

insert into t2 values (3, 1, 'y', 6);

insert into t2 values (4, 2, 'x', 4);

insert into t2 values (5, 2, 'z', 10);

insert into t2 values (6, 2, 'x', 20);

insert into t2 values (7, 3, 'y', 12);

insert into t2 values (8, 3, 'y', 15);

select a.category

 , a.mykey1

 , sum(distinct a.amount1)

 , b.type

 , sum(b.amount2)

 from t1 a

 , t2 b

where a.mykey1 = b.mykey1

group by

 a.category

 , a.mykey1

 , a.amount1

 , b.type

/

select a.category

-- , a.mykey1

 , sum(distinct a.amount1)

 , b.type

 , sum(b.amount2)

 from t1 a

 , t2 b

where a.mykey1 = b.mykey1

group by

 a.category

-- , a.mykey1

-- , a.amount1

 , b.type

/

select decode(grouping(a.category), 1, 'All', a.category) as category

 , decode(grouping(a.mykey1), 1, 'All', a.mykey1) as job

 , decode(grouping(b.type), 1, 'All', b.type) as type

 , count(*)

 , sum(distinct a.amount1)

 , sum(b.amount2)

 from t1 a

 , t2 b

where a.mykey1 = b.mykey1

group by rollup

 ( a.category

 , a.mykey1

 , b.type

 )

order by

 a.category

 , a.mykey1

 , b.type

/


here's what i get:


SQL select a.category

 2 , a.mykey1

 3 , sum(distinct a.amount1)

 4 , b.type

 5 , sum(b.amount2)

 6 from t1 a

 7 , t2 b

 8 where a.mykey1 = b.mykey1

 9 group by

10 a.category

11 , a.mykey1

12 , a.amount1

13 , b.type

14 /


CATEG MYKEY1 SUM(DISTINCTA.AMOUNT1) TYPE SUM(B.AMOUNT2)

- -- -- - --

AA 1 5 x 3

AA 1 5 y 6

AA 2 3 x 24

AA 2 3 z 10

BB 3 50 y 27


5 rows selected.


perfect.


but this is the problem query:


SQL select a.category

 2 -- , a.mykey1

 3 , sum(distinct a.amount1)

 4 , b.type

 5 , sum(b.amount2)

 6 from t1 a

 7 , t2 b

 8 where a.mykey1 = b.mykey1

 9 group by

10 a.category

11 -- , a.mykey1

12 -- , a.amount1

13 , b.type

14 /


CATEG SUM(DISTINCTA.AMOUNT1) TYPE SUM(B.AMOUNT2)

- -- - --

AA 8 x 27

AA 5 y 6

AA 3 z 10

BB 50 y 27


4 rows selected.


wrong. i want the resultset to look like this:


CATEG SUM(DISTINCTA.AMOUNT1) TYPE SUM(B.AMOUNT2)

- -- - --

AA 8 x 27

AA 8 y 6

AA 8 z 10

BB 50 y 27



then this is cool, but not what i want:


SQL select decode(grouping(a.category), 1, 'All', a.category) as category

 2 , decode(grouping(a.mykey1), 1, 'All', a.mykey1) as job

 3 , decode(grouping(b.type), 1, 'All', b.type) as type

 4 , count(*)

 5 , sum(distinct a.amount1)

 6 , sum(b.amount2)

 7 from t1 a

 8 , t2 b

 9 where a.mykey1 = b.mykey1

10 group by rollup

11 ( a.category

12 , a.mykey1

13 , b.type

14 )

15 order by

16 a.category

17 , a.mykey1

18 , b.type

19 /


CATEG JOB TYPE COUNT(*) SUM(DISTINCTA.AMOUNT1) SUM(B.AMOUNT2)

- - - -- -- --

AA 1 x 2 5 3

AA 1 y 1 5 6

AA 1 All 3 5 9

AA 2 x 2 3 24

AA 2 z 1 3 10

AA 2 All 3 3 34

AA All All 6 8 43

BB 3 y 2 50 27

BB 3 All 2 50 27

BB All All 2 50 27

All All All 8 58 70


11 rows selected.



Steve Ollig

[EMAIL PROTECTED]

(952)826-4241

a DIFFERENT sql question

2003-03-13 Thread STEVE OLLIG
since we're having fun with SQL today - here's one that's hurting my brain
at the moment.  I need to sum columns at 2 different groupings in my
resultset.  The first select is perfect; the 2nd is where i have trouble;
but i know i can do stuff like the 3rd example.  How do I get the 2nd one to
work?

SQL SCRIPT:
drop table t1;
drop table t2;
create table t1 (mykey1 number(5), category varchar2(5), amount1 number(5));
create table t2 (mykey2 number(5), mykey1 number(5), type varchar2(5),
amount2 number(5));
insert into t1 values (1, 'AA', 5);
insert into t1 values (2, 'AA', 3);
insert into t1 values (3, 'BB', 50);
insert into t2 values (1, 1, 'x', 1);
insert into t2 values (2, 1, 'x', 2);
insert into t2 values (3, 1, 'y', 6);
insert into t2 values (4, 2, 'x', 4);
insert into t2 values (5, 2, 'z', 10);
insert into t2 values (6, 2, 'x', 20);
insert into t2 values (7, 3, 'y', 12);
insert into t2 values (8, 3, 'y', 15);
select a.category
 , a.mykey1
 , sum(distinct a.amount1)
 , b.type
 , sum(b.amount2)
  from t1 a
 , t2 b
 where a.mykey1 = b.mykey1
 group by
   a.category
 , a.mykey1
 , a.amount1
 , b.type
/
select a.category
--   , a.mykey1
 , sum(distinct a.amount1)
 , b.type
 , sum(b.amount2)
  from t1 a
 , t2 b
 where a.mykey1 = b.mykey1
 group by
   a.category
--   , a.mykey1
--   , a.amount1
 , b.type
/
select decode(grouping(a.category), 1, 'All', a.category) as category
 , decode(grouping(a.mykey1), 1, 'All', a.mykey1) as job
 , decode(grouping(b.type), 1, 'All', b.type) as type
 , count(*)
 , sum(distinct a.amount1)
 , sum(b.amount2)
  from t1 a
 , t2 b
 where a.mykey1 = b.mykey1
 group by rollup
 ( a.category
 , a.mykey1
 , b.type
 )
order by
   a.category
 , a.mykey1
 , b.type
/

here's what i get:

SQL select a.category
  2   , a.mykey1
  3   , sum(distinct a.amount1)
  4   , b.type
  5   , sum(b.amount2)
  6from t1 a
  7   , t2 b
  8   where a.mykey1 = b.mykey1
  9   group by
 10 a.category
 11   , a.mykey1
 12   , a.amount1
 13   , b.type
 14  /

CATEG MYKEY1 SUM(DISTINCTA.AMOUNT1) TYPE  SUM(B.AMOUNT2)
- -- -- - --
AA 1  5 x  3
AA 1  5 y  6
AA 2  3 x 24
AA 2  3 z 10
BB 3 50 y 27

5 rows selected.

perfect.

but this is the problem query:

SQL select a.category
  2  --   , a.mykey1
  3   , sum(distinct a.amount1)
  4   , b.type
  5   , sum(b.amount2)
  6from t1 a
  7   , t2 b
  8   where a.mykey1 = b.mykey1
  9   group by
 10 a.category
 11  --   , a.mykey1
 12  --   , a.amount1
 13   , b.type
 14  /

CATEG SUM(DISTINCTA.AMOUNT1) TYPE  SUM(B.AMOUNT2)
- -- - --
AA 8 x 27
AA 5 y  6
AA 3 z 10
BB50 y 27

4 rows selected.

wrong.  i want the resultset to look like this:

CATEG SUM(DISTINCTA.AMOUNT1) TYPE  SUM(B.AMOUNT2)
- -- - --
AA 8 x 27
AA 8 y  6
AA 8 z 10
BB50 y 27


then this is cool, but not what i want:

SQL select decode(grouping(a.category), 1, 'All', a.category) as category
  2   , decode(grouping(a.mykey1), 1, 'All', a.mykey1) as job
  3   , decode(grouping(b.type), 1, 'All', b.type) as type
  4   , count(*)
  5   , sum(distinct a.amount1)
  6   , sum(b.amount2)
  7from t1 a
  8   , t2 b
  9   where a.mykey1 = b.mykey1
 10   group by rollup
 11   ( a.category
 12   , a.mykey1
 13   , b.type
 14   )
 15  order by
 16 a.category
 17   , a.mykey1
 18   , b.type
 19  /

CATEG JOB   TYPECOUNT(*) SUM(DISTINCTA.AMOUNT1) SUM(B.AMOUNT2)
- - - -- -- --
AA1 x  2  5  3
AA1 y  1  5  6
AA1 All3  5  9
AA2 x  2  3 24
AA2 z  1  3 10
AA2 All3  3 34
AAAll   All6  8 43
BB3 y  2 50 27
BB3 All2 50 27
BBAll   All2 50 27
All   All   

RE: a DIFFERENT sql question

2003-03-13 Thread STEVE OLLIG
ok - i came up with a solution.  but in real life i have a lot of amount1's
in t1 so it becomes an ugly brute force looking query.  anybody have a more
elegant solution?


  1  select a.category
  2   , (select sum(s.amount1) from t1 s where a.category = s.category)
as amount1sum
  3   , b.type
  4   , sum(b.amount2)
  5from t1 a
  6   , t2 b
  7   where a.mykey1 = b.mykey1
  8   group by
  9 a.category
 10*  , b.type
SQL /

CATEG AMOUNT1SUM TYPE  SUM(B.AMOUNT2)
- -- - --
AA 8 x 27
AA 8 y  6
AA 8 z 10
BB50 y 27

4 rows selected.

SQL 

-Original Message-
Sent: Thursday, March 13, 2003 10:49 AM
To: Multiple recipients of list ORACLE-L


since we're having fun with SQL today - here's one that's hurting my brain
at the moment.  I need to sum columns at 2 different groupings in my
resultset.  The first select is perfect; the 2nd is where i have trouble;
but i know i can do stuff like the 3rd example.  How do I get the 2nd one to
work?

SQL SCRIPT:
drop table t1;
drop table t2;
create table t1 (mykey1 number(5), category varchar2(5), amount1 number(5));
create table t2 (mykey2 number(5), mykey1 number(5), type varchar2(5),
amount2 number(5));
insert into t1 values (1, 'AA', 5);
insert into t1 values (2, 'AA', 3);
insert into t1 values (3, 'BB', 50);
insert into t2 values (1, 1, 'x', 1);
insert into t2 values (2, 1, 'x', 2);
insert into t2 values (3, 1, 'y', 6);
insert into t2 values (4, 2, 'x', 4);
insert into t2 values (5, 2, 'z', 10);
insert into t2 values (6, 2, 'x', 20);
insert into t2 values (7, 3, 'y', 12);
insert into t2 values (8, 3, 'y', 15);
select a.category
 , a.mykey1
 , sum(distinct a.amount1)
 , b.type
 , sum(b.amount2)
  from t1 a
 , t2 b
 where a.mykey1 = b.mykey1
 group by
   a.category
 , a.mykey1
 , a.amount1
 , b.type
/
select a.category
--   , a.mykey1
 , sum(distinct a.amount1)
 , b.type
 , sum(b.amount2)
  from t1 a
 , t2 b
 where a.mykey1 = b.mykey1
 group by
   a.category
--   , a.mykey1
--   , a.amount1
 , b.type
/
select decode(grouping(a.category), 1, 'All', a.category) as category
 , decode(grouping(a.mykey1), 1, 'All', a.mykey1) as job
 , decode(grouping(b.type), 1, 'All', b.type) as type
 , count(*)
 , sum(distinct a.amount1)
 , sum(b.amount2)
  from t1 a
 , t2 b
 where a.mykey1 = b.mykey1
 group by rollup
 ( a.category
 , a.mykey1
 , b.type
 )
order by
   a.category
 , a.mykey1
 , b.type
/

here's what i get:

SQL select a.category
  2   , a.mykey1
  3   , sum(distinct a.amount1)
  4   , b.type
  5   , sum(b.amount2)
  6from t1 a
  7   , t2 b
  8   where a.mykey1 = b.mykey1
  9   group by
 10 a.category
 11   , a.mykey1
 12   , a.amount1
 13   , b.type
 14  /

CATEG MYKEY1 SUM(DISTINCTA.AMOUNT1) TYPE  SUM(B.AMOUNT2)
- -- -- - --
AA 1  5 x  3
AA 1  5 y  6
AA 2  3 x 24
AA 2  3 z 10
BB 3 50 y 27

5 rows selected.

perfect.

but this is the problem query:

SQL select a.category
  2  --   , a.mykey1
  3   , sum(distinct a.amount1)
  4   , b.type
  5   , sum(b.amount2)
  6from t1 a
  7   , t2 b
  8   where a.mykey1 = b.mykey1
  9   group by
 10 a.category
 11  --   , a.mykey1
 12  --   , a.amount1
 13   , b.type
 14  /

CATEG SUM(DISTINCTA.AMOUNT1) TYPE  SUM(B.AMOUNT2)
- -- - --
AA 8 x 27
AA 5 y  6
AA 3 z 10
BB50 y 27

4 rows selected.

wrong.  i want the resultset to look like this:

CATEG SUM(DISTINCTA.AMOUNT1) TYPE  SUM(B.AMOUNT2)
- -- - --
AA 8 x 27
AA 8 y  6
AA 8 z 10
BB50 y 27


then this is cool, but not what i want:

SQL select decode(grouping(a.category), 1, 'All', a.category) as category
  2   , decode(grouping(a.mykey1), 1, 'All', a.mykey1) as job
  3   , decode(grouping(b.type), 1, 'All', b.type) as type
  4   , count(*)
  5   , sum(distinct a.amount1)
  6   , sum(b.amount2)
  7from t1 a
  8   , t2 b
  9   where a.mykey1 = b.mykey1
 10   group by rollup
 11   ( a.category
 12   , a.mykey1
 13   , b.type
 14   )
 15  order by
 16 a.category
 17   , a.mykey1
 18   , b.type