2016-06-30 10 views
1

Мне нужно добавить сумму за каждые pvkey, и должны быть перечислены только те pvkeys, где total_amount >= 250, и они зависят от определенного года/даты ,Как суммировать для каждого pvkey в зависимости от даты и должно быть> = 250

select finance.pvkey,sum(amount) from finance 
inner join contact 
on contact.pvkey = finance.pvkey 
where rectype='TOP_MAJDON'or rectype='MAJ_DON' or rectype='MEMBER'or rectype='MAJORDON' 
and transdate between '2015-01-01' and '2015-12-31' and amount >=250 
group by finance.pvkey 

Я получаю результаты, но некоторые из них являются неправильными, некоторые из них менее 250, и они не находятся внутри определенной даты (между «2015-01-01» и «2015-12-31»).

+0

Привет @ garincha03 одно: убедитесь, что ваш трансдат имеет следующий «CONVERT (char (10), transdate, 126) BETWEEN '2015-01-01' AND '2015-12-31'', если вы используя sqlserver. Вы должны упомянуть, какой тип механизма данных вы используете –

ответ

1

При использовании OR вместе с AND необходимо иметь круглую скобку Как так:

(rectype='TOP_MAJDON'or rectype='MAJ_DON' or rectype='MEMBER'or rectype='MAJORDON') 
and transdate between '2015-01-01' and '2015-12-31' and amount >=250 

otherwize вы не получите то, что вы хотите

1

Использование имея для функции фильтра агрегации

select finance.pvkey,sum(amount) from finance 
inner join contact 
on contact.pvkey = finance.pvkey 
where rectype='TOP_MAJDON'or rectype='MAJ_DON' or rectype='MEMBER'or rectype='MAJORDON' 
and transdate between '2015-01-01' and '2015-12-31' 
group by finance.pvkey 
having amount >=250 
+0

Неправильный заказ ... GROUP BY идет до HAVING. – jarlh

+0

@jarlh спасибо ответ обновлен – scaisEdge

1

Вам необходимо исправить свой пункт where и добавить having. Я бы рекомендовал использовать in для where:

select f.pvkey, sum(amount) 
from finance f inner join 
    contact c 
    on c.pvkey = f.pvkey 
where rectype in ('TOP_MAJDON', 'MAJ_DON', 'MEMBER', 'MAJORDON') and 
     transdate between '2015-01-01' and '2015-12-31' 
group by f.pvkey 
having sum(amount) >= 250; 

Примечание: Я предполагаю, что «TOTAL_AMOUNT» в вопросе относится к sum(amount). Если это действительно относится к amount, то сохраните сравнение в предложении where.

Я должен добавить: Вы, похоже, смущены о and и or в условиях. Пока вам не будет комфортно с такой логикой, я рекомендую вам использовать круглые скобки вокруг ваших условных выражений.

 Смежные вопросы

  • Нет связанных вопросов^_^