Опять я, теперь не получаеться простейший запрос

до сессии недолго
Дата: 03.12.2009 12:44:35
Всем привет. Помогите пожалуйста с запросом. Итак имеем
CREATE TABLE T2
(
  SZ      NUMBER(4),ID_R NUMBER(4), P1 NUMBER(4),  P2 NUMBER(4), P3 NUMBER(4), P4 NUMBER(4)
);
insert into T2 (sz,ID_R,p1,p2,p3,p4) values (1,3,55,66,0,0);
insert into T2 (sz,ID_R,p1,p2,p3,p4) values (2,3,0,0,41,17);
insert into T2 (sz,ID_R,p1,p2,p3,p4) values (1,4,22,33,0,0);
insert into T2 (sz,ID_R,p1,p2,p3,p4) values (2,4,0,0,38,54);
insert into T2 (sz,ID_R,p1,p2,p3,p4) values (2,5,0,0,52,35);
commit;
SELECT * FROM T2 order by SZ, ID_R;
        SZ       ID_R         P1         P2         P3         P4
---------- ---------- ---------- ---------- ---------- ----------
         1          3         55         66          0          0
         1          4         22         33          0          0
         2          3          0          0         41         17
         2          4          0          0         38         54
         2          5          0          0         52         35
теперь мне надо получить выборку по принципу: если совпадают ID_R и SZ разные,то получить результат вот такого вида
      ID_R         P1         P2         P3         P4
---------- ---------- ---------- ---------- ----------
         3         55         66         41         17
         4         22         33         38         54
что реализуесться следующим запросом
SELECT  F1.ID_R,F1.P1,F1.P2, F2.P3,F2.P4
  FROM T2 F1, T2 F2
WHERE F1.SZ = 1 AND F2.SZ = 2
  AND F1.ID_R = F2.ID_R;

но здесь не попадает в выборку значения, где ID_R = 5, т.к.нет SZ = 1
а вот как написать запрос, чтобы он возвращал запрос примерно такого вида
      ID_R         P1         P2         P3         P4
---------- ---------- ---------- ---------- ----------
         3         55         66         41         17
         4         22         33         38         54
         5          0          0         52         35
а вот как это реализовать не получаеться. Помогите написать правильно.
4ton
Дата: 03.12.2009 12:59:36
до сессии недолго,

сгруппируйте по ID и выведите максимумы p
sha0nna
Дата: 03.12.2009 13:01:21
до сессии недолго,

SELECT F1.ID_R, sum(F1.P1) P1,
                sum(F1.P2) P2,
                sum(F1.P3) P3,
                sum(F1.P4) P4 
                FROM 
T2 F1 LEFT join T2 F2 on (F1.ID_R=F2.ID_R and F1.SZ<>F2.SZ)
group by F1.ID_R
order by F1.ID_R

А так?
Elic
Дата: 03.12.2009 13:04:32
select id_r, max(p1), max(p2), max(p3), max(p4) from t2 group by id_r;
RTFM
andrey_anonymous
Дата: 03.12.2009 13:05:56
select id_r
     , max(decode(sz,1,p1,0)) p1
     , max(decode(sz,1,p2,0)) p2
     , max(decode(sz,2,p3,0)) p3
     , max(decode(sz,2,p4,0)) p4
 from t2
group by id_r
order by 1
до сессии недолго
Дата: 03.12.2009 13:13:00
Да спасибо всем, именно так .Причём все способы откликнувшихся работают как надо.