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

Откуда:
Сообщений: 2
Господа, уже голову сломал :( Подскажите как оптимально решить следующий вопрос на SQL! без PL/SQL и подзапросов, если это возможно!
Есть таблица (tab)
----------------
code flag sum
1111 1 15
1111 0 10
----------------
в зависимости от столбца flag(оно либо 0, либо 1) нужно вычесить столбцы sum
Должно получиться:
-----------------
code sum
1111 5
-----------------
(flag=1 sum1=15,flag=0 sum2=10 =>sum1-sum2=15-10=5)
6 сен 06, 06:59    [3097197]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение строк по столбцам SQL  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1635
Alexeyy
Господа, уже голову сломал :( Подскажите как оптимально решить следующий вопрос на SQL! без PL/SQL и подзапросов, если это возможно!
Есть таблица (tab)
----------------
code flag sum
1111 1 15
1111 0 10
----------------
в зависимости от столбца flag(оно либо 0, либо 1) нужно вычесить столбцы sum
Должно получиться:
-----------------
code sum
1111 5
-----------------
(flag=1 sum1=15,flag=0 sum2=10 =>sum1-sum2=15-10=5)

Можно так:
select code,sum(decode(flag,0,-1,flag)*sum) from t group by code
6 сен 06, 07:04    [3097199]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение строк по столбцам SQL  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18483
tst> create table t1 as
  2  select 1111 kod, 1 flag, 15 summ from dual union all
  3  select 1111 kod, 0 flag, 10 summ from dual;

Table created.

tst> select kod, sum((flag*2-1)*summ) from t1 group by kod;

       KOD SUM((FLAG*2-1)*SUMM)
---------- --------------------
      1111                    5
6 сен 06, 07:07    [3097201]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение строк по столбцам SQL  [new]
Alexeyy
Member

Откуда:
Сообщений: 2
Спасибо огромное!
6 сен 06, 07:08    [3097202]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение строк по столбцам SQL  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
По-моему работать будет быстрее так
select kod, sum(DECODE(flag, 1,summ, -summ)) from t1 group by kod;
Умножения нет
6 сен 06, 11:01    [3098055]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение строк по столбцам SQL  [new]
Elic
Member

Откуда:
Сообщений: 29977
Andrey.L
По-моему работать будет быстрее так: Умножения нет
Это несомнено сохранит мегаваттчасы электроэнергии :)
6 сен 06, 11:08    [3098118]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение строк по столбцам SQL  [new]
Takurava
Member

Откуда:
Сообщений: 1776
Elic
Это несомнено сохранит мегаваттчасы электроэнергии :)
Может и не сохранит, но выглядит лаконичней.
6 сен 06, 11:16    [3098166]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение строк по столбцам SQL  [new]
Elic
Member

Откуда:
Сообщений: 29977
Takurava
Может и не сохранит, но выглядит лаконичней.
Это всего лишь вариация на тему. На вкус и цвет ... :)
Да и в общем случае (когда не column, а expr) совсем не лаконичней :)
6 сен 06, 11:24    [3098220]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение строк по столбцам SQL  [new]
Takurava
Member

Откуда:
Сообщений: 1776
А если expr, то по мне красивей
Вячеслав Любомудров
select kod, sum((flag*2-1)*summ) from t1 group by kod;
6 сен 06, 11:26    [3098239]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить