Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ROLLUP  [new]
faig
Member

Откуда: Chicago ,IL
Сообщений: 146
Ni kak ne mohu poluchit promejutochniye summi

SELECT 1 a, 2 b, 3 c, 4 d
          FROM DUAL
        UNION ALL
        SELECT 1, 1, 3, 4
          FROM DUAL
        UNION ALL
        SELECT 1, 3, 3, 1
          FROM DUAL
        UNION ALL
        SELECT 2, 3, 2, 1
          FROM DUAL

reultat doljen bit

A B C D
1 2 3 4
1 1 3 4
1 3 3 1
total (1) 6 9 9
2 3 2 1
total (2) 3 2 1
3 мар 08, 23:24    [5365129]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
а как пробовал?
3 мар 08, 23:42    [5365159]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10040
SQL> WITH t AS (
  2              SELECT 1 a, 2 b, 3 c, 4 d
  3                FROM DUAL
  4             UNION ALL
  5              SELECT 1, 1, 3, 4
  6                FROM DUAL
  7             UNION ALL
  8              SELECT 1, 3, 3, 1
  9                FROM DUAL
 10             UNION ALL
 11              SELECT 2, 3, 2, 1
 12                FROM DUAL
 13            )
 14  SELECT  a,b,c,d
 15    FROM  (
 16            SELECT  t.*,0 weight
 17              FROM  t
 18           UNION ALL
 19            SELECT  a,sum(b),sum(c),sum(d),1 weight
 20              FROM  t
 21              GROUP BY a
 22          )
 23    ORDER BY a,weight
 24  /

         A          B          C          D
---------- ---------- ---------- ----------
         1          2          3          4
         1          1          3          4
         1          3          3          1
         1          6          9          9
         2          3          2          1
         2          3          2          1

6 rows selected.

SQL> 

SY.
4 мар 08, 00:05    [5365204]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
SY
Тема роллапа не раскрыта
4 мар 08, 00:15    [5365215]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10040
andreymx
SY
Тема роллапа не раскрыта


OK. Here we go :)

SQL> WITH t AS (
  2              SELECT 1 a, 2 b, 3 c, 4 d
  3                FROM DUAL
  4             UNION ALL
  5              SELECT 1, 1, 3, 4
  6                FROM DUAL
  7             UNION ALL
  8              SELECT 1, 3, 3, 1
  9                FROM DUAL
 10             UNION ALL
 11              SELECT 2, 3, 2, 1
 12                FROM DUAL
 13            )
 14  SELECT  a,
 15          case grouping(b) when 0 then b else max(sum_b) end b,
 16          case grouping(c) when 0 then b else max(sum_c) end c,
 17          case grouping(d) when 0 then b else max(sum_d) end d
 18    FROM  (
 19           SELECT  t.*,
 20                   SUM(b) OVER(PARTITION BY a) sum_b,
 21                   SUM(c) OVER(PARTITION BY a) sum_c,
 22                   SUM(d) OVER(PARTITION BY a) sum_d
 23             FROM  t
 24          )
 25    GROUP BY a,ROLLUP(b,c,d)
 26    HAVING grouping(b) + grouping(c) + grouping(d) IN (0,3)
 27    ORDER BY 1,2,3,4
 28  /

         A          B          C          D
---------- ---------- ---------- ----------
         1          1          1          1
         1          2          2          2
         1          3          3          3
         1          6          9          9
         2          3          2          1
         2          3          3          3

6 rows selected.

SQL> 

SY.
4 мар 08, 00:21    [5365221]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
Mblmra
Member

Откуда: moscow forest
Сообщений: 63
select decode(gr_b, 0, to_char(a), 'Summa'),
decode(gr_b, 0, b, sum_b),
decode(gr_c, 0, c, sum_c),
decode(gr_d, 0, d, sum_d)
from(
select a,
b,
c,
d,
sum(b) over (partition by a order by a) sum_b,
grouping(b) gr_b,
sum(c) over (partition by a order by a) sum_c,
grouping(c) gr_c,
sum(d) over (partition by a order by a) sum_d,
grouping(d) gr_d
from(
SELECT 1 a, 2 b, 3 c, 4 d
FROM DUAL
UNION ALL
SELECT 1, 1, 3, 4
FROM DUAL
UNION ALL
SELECT 1, 3, 3, 1
FROM DUAL
UNION ALL
SELECT 2, 3, 2, 1 FROM DUAL)
group by rollup(a, (b, c, d)))


SY оередил, но опубликуем


ничто так не вечно как каменный цветок
4 мар 08, 00:23    [5365226]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
Mblmra
Member

Откуда: moscow forest
Сообщений: 63
немного поспешил

select *
from(select decode(gr_b, 0, to_char(a), 'Summa'),
decode(gr_b, 0, b, sum_b) b ,
decode(gr_c, 0, c, sum_c) c ,
decode(gr_d, 0, d, sum_d) d
from(
select a,
b,
c,
d,
sum(b) over (partition by a order by a) sum_b,
grouping(b) gr_b,
sum(c) over (partition by a order by a) sum_c,
grouping(c) gr_c,
sum(d) over (partition by a order by a) sum_d,
grouping(d) gr_d
from(
SELECT 1 a, 2 b, 3 c, 4 d
FROM DUAL
UNION ALL
SELECT 1, 1, 3, 4
FROM DUAL
UNION ALL
SELECT 1, 3, 3, 1
FROM DUAL
UNION ALL
SELECT 2, 3, 2, 1 FROM DUAL)
group by rollup(a, (b, c, d))))
where b + c + d <> 0


ничто так не вечно как каменный цветок
4 мар 08, 00:25    [5365235]     Ответить | Цитировать Сообщить модератору
 ROLLUP  [new]
faig
Member

Откуда: Chicago ,IL
Сообщений: 146
Spasibo vsem
4 мар 08, 01:15    [5365327]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
faig
Member

Откуда: Chicago ,IL
Сообщений: 146
SY
andreymx
SY
Тема роллапа не раскрыта


OK. Here we go :)

SQL> WITH t AS (
  2              SELECT 1 a, 2 b, 3 c, 4 d
  3                FROM DUAL
  4             UNION ALL
  5              SELECT 1, 1, 3, 4
  6                FROM DUAL
  7             UNION ALL
  8              SELECT 1, 3, 3, 1
  9                FROM DUAL
 10             UNION ALL
 11              SELECT 2, 3, 2, 1
 12                FROM DUAL
 13            )
 14  SELECT  a,
 15          case grouping(b) when 0 then b else max(sum_b) end b,
 16          case grouping(c) when 0 then b else max(sum_c) end c,
 17          case grouping(d) when 0 then b else max(sum_d) end d
 18    FROM  (
 19           SELECT  t.*,
 20                   SUM(b) OVER(PARTITION BY a) sum_b,
 21                   SUM(c) OVER(PARTITION BY a) sum_c,
 22                   SUM(d) OVER(PARTITION BY a) sum_d
 23             FROM  t
 24          )
 25    GROUP BY a,ROLLUP(b,c,d)
 26    HAVING grouping(b) + grouping(c) + grouping(d) IN (0,3)
 27    ORDER BY 1,2,3,4
 28  /

         A          B          C          D
---------- ---------- ---------- ----------
         1          1          1          1
         1          2          2          2
         1          3          3          3
         1          6          9          9
         2          3          2          1
         2          3          3          3

6 rows selected.

SQL> 

SY.


Chto-to te to v resultate. Dlya a = 1 perviye 3 stroki vernuli nepravilniye b, c and d
4 мар 08, 01:21    [5365331]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10040
faig
Chto-to te to v resultate. Dlya a = 1 perviye 3 stroki vernuli nepravilniye b, c and d


Absolutely. Cut & paste error:

SY
 14  SELECT  a,
15 case grouping(b) when 0 then b else max(sum_b) end b,
16 case grouping(c) when 0 then b else max(sum_c) end c,
17 case grouping(d) when 0 then b else max(sum_d) end d


SQL> WITH t AS (
  2              SELECT 1 a, 2 b, 3 c, 4 d
  3                FROM DUAL
  4             UNION ALL
  5              SELECT 1, 1, 3, 4
  6                FROM DUAL
  7             UNION ALL
  8              SELECT 1, 3, 3, 1
  9                FROM DUAL
 10             UNION ALL
 11              SELECT 2, 3, 2, 1
 12                FROM DUAL
 13            )
 14  SELECT  a,
 15          case grouping(b) when 0 then b else max(sum_b) end b,
 16          case grouping(c) when 0 then c else max(sum_c) end c,
 17          case grouping(d) when 0 then d else max(sum_d) end d
 18    FROM  (
 19           SELECT  t.*,
 20                   SUM(b) OVER(PARTITION BY a) sum_b,
 21                   SUM(c) OVER(PARTITION BY a) sum_c,
 22                   SUM(d) OVER(PARTITION BY a) sum_d
 23             FROM  t
 24          )
 25    GROUP BY a,ROLLUP(b,c,d)
 26    HAVING grouping(b) + grouping(c) + grouping(d) IN (0,3)
 27    ORDER BY 1,2,3,4
 28  /

         A          B          C          D
---------- ---------- ---------- ----------
         1          1          3          4
         1          2          3          4
         1          3          3          1
         1          6          9          9
         2          3          2          1
         2          3          2          1

6 rows selected.

SQL> 

SY.
4 мар 08, 03:35    [5365393]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
WITH tbl AS
(
  SELECT 1 a, 2 b, 3 c, 4 d FROM DUAL UNION ALL
  SELECT 1, 1, 3, 4 FROM DUAL UNION ALL
  SELECT 1, 3, 3, 1 FROM DUAL UNION ALL
  SELECT 2, 3, 2, 1 FROM DUAL
)
SELECT	a, SUM(b), SUM(c),SUM(d)
FROM
(
  SELECT	a,b,c,d,row_number()OVER(ORDER BY a,c,b,d) rn
  FROM	tbl
)
GROUP BY ROLLUP(a, rn)
HAVING a > 0
Row#ASUM(B)SUM(C)SUM(D)
11134
21234
31331
41699
52321
62321
4 мар 08, 08:57    [5365583]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
или так
WITH tbl AS
(
	SELECT 1 a, 2 b, 3 c, 4 d FROM DUAL UNION ALL
	SELECT 1, 1, 3, 4 FROM DUAL UNION ALL
	SELECT 1, 3, 3, 1 FROM DUAL UNION ALL
	SELECT 2, 3, 2, 1 FROM DUAL
)
SELECT	a, SUM(b) b, SUM(c) c,SUM(d) d
FROM	tbl
GROUP BY ROLLUP(a, ROWNUM)
HAVING GROUPING(a)=0
ORDER BY a,b,c,d
4 мар 08, 09:28    [5365658]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
а вообще (имхо) >= 9i про rollup/cube надо забыть насмерть, в пользу grouping sets
4 мар 08, 11:41    [5366463]     Ответить | Цитировать Сообщить модератору
 Re: ROLLUP  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
orawish
а вообще (имхо) >= 9i про rollup/cube надо забыть насмерть, в пользу grouping sets
изверг! придётся учить
4 мар 08, 11:53    [5366583]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить