Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделить таблицу на положительные и отрицательные, числа, затем просуммировать столбцы 
V
    Опции темы
neosapient
Дата 1.7.2010, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Здравствуйте, помогите новичку составить верный запрос.

Есть таблица с полями:
 - ID, идентификатор операции
 - USER, пользователь
 - MONEY, денежная операция (может быть положительной и отрицательной

ID  USER  MONEY
1        1        +10
2        1         -20
3        2        +60
4        1        +40


Требуется разбить столбец MONEY на положительные и отрицательные значения, затем сгрупировать выборки по USER  и просуммировать их.


USER   POS   NEG
1           50      20
2           60        0

То есть первая и четвертая строка исходной таблицы сложилась в число 50 и их сумма попала к первому пользователю в положительный столбец.
Для значения второй строки исходной таблицы был отброшен знак и число попало к первому пользователю в отрицательный столбец.
Значение третей строки исходной таблицы попало к второму пользователю в положительный столбец.
А в отрицательный столбец к второму пользователю попал 0, так как в исходных данных не было соответствующих значений

Это сообщение отредактировал(а) neosapient - 1.7.2010, 17:04
PM MAIL   Вверх
Akina
Дата 1.7.2010, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Использовать CASE, IIF или что там есть в конкретном языке для отбора.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Gluttton
Дата 1.7.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Код

select
    s.usr,
    sum(s.pos) as pos,
    sum(s.neg)*(-1) as neg
from
(
    select
        t.usr,
        case
            when t.money>0
            then t.money
            else 0
        end as pos,
        case
            when t.money<0
            then t.money
            else 0
        end as neg
    from t
)   as s
    group by s.usr


Добавлено через 10 минут и 18 секунд
Или так:
Код

select
    s.usr,
    case
        when s.pos is null
        then 0
        else s.pos
    end as pos,
    case
        when s.neg is null
        then 0
        else s.neg
    end as neg
from
(
    select distinct
        t.usr,
        (
            select sum(a.money)
            from t as a
                where a.usr = t.usr
                and a.money > 0
        )   as pos,
        (
            select sum(b.money)*(-1)
            from t as b
                where b.usr = t.usr
                and b.money < 0
        )   as neg
    from t
)   as s



--------------------
Слава Україні!
PM MAIL   Вверх
neosapient
Дата 2.7.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: нет
Всего: 4



Спасибо за ответ.
Помогло,  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.