sql query: вычтите из результатов соответствующее значение USD, YEN, которое имеет Type = 'r' - PullRequest
0 голосов
/ 13 июля 2010

Мне нужна помощь с запросом. Рассмотрим следующую таблицу:

альтернативный текст http://i26.tinypic.com/1ot0d0.jpg

Мне нужно сначала выбрать сумму каждого кода из таблицы. Я делаю это с простой суммой и группировкой за заявлением. Затем я должен вычесть результаты из каждой суммы кода, где type = 'r'

1) Скажем, для первой части запроса мы получим 2 строки из суммы (одна с общим количеством долларов США и одна с общим иеной)

2) Теперь мне нужно вычесть из этих результатов соответствующее значение USD, YEN, которое имеет Type = 'r'

Я должен сделать это внутри SQL, а не хранимой процедуры.

Ответы [ 5 ]

4 голосов
/ 13 июля 2010

Почему бы не использовать оператор WHERE, чтобы сказать WHERE Type != 'r', чтобы эти значения вообще никогда не добавлялись к сумме ...

SELECT `Code`, SUM(`Amount`) AS `Total` 
  FROM `Table` 
 WHERE `Type` != 'r' 
 GROUP 
    BY `Code`;

Что-то в этом роде.

1 голос
/ 13 июля 2010

Вы можете сделать это одним простым запросом:

select
   code,
   sum(case when type = 'r' then (-1 * amount) else amount end) as sum
from 
   yourtable
group by
   code

По сути, вы меняете знак строк, имеющих type = 'r', поэтому при суммировании всех строк дляконкретный код, вы получите правильный ответ.

1 голос
/ 13 июля 2010
select code, l.amount - r.amount
from
    (select code, sum(amount) as amount from my_table group by code) l
    left join (select code, sum(amount) as amount from my_table where type = 'r' group by code) r
    on l.code = r.code
0 голосов
/ 13 июля 2010

Попробуйте:

select code, 
       sum(amount) gross_total,
       sum(case when type = 'r' then amount else 0 end) type_r_total,
       sum(case when type != 'r' then amount else 0 end) net_total
from yourtable
group by code;

, чтобы просмотреть общие итоги, только итоги типа R и итоги не-типа R для каждой валюты в одной строке для каждой валюты за один проход.

0 голосов
/ 13 июля 2010

Должен ли это быть один запрос?

Я бы сказал, СУММА общая, затем СУММА подкатегория, где Type = 'r', затем вычесть одно из другого.

Вы могли бы сделать это в одной строке SQL, но я уверен, что это будет либо объединение таблицы с самим собой, либо использование подзапроса. В любом случае, он выполняет ту же работу, что и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...