2014-12-16 4 views
2

У меня есть представление, скрепляющее данные из нескольких таблиц. Давайте рассмотрим это будет так:SQL SUM ограниченный

TransPK Amount Currency_ID 
------------------------------- 
1   2000  0 
1   -2000  0 
2   3600  1 
2   -7200  2 
. . . 

Я хочу, чтобы вычислить сумму (сумма), за отчетливым TransPK, но только там, где все Currency_IDs для данного TransPK одинаковы. то есть в приведенных выше данных будет возвращен только один результат, поскольку для TransPK = 2 для Currency_ID имеются два значения.

Я понятия не имею, что искать по этому вопросу! Я пробовал «SQL SUM limited», но хиты не были полезны. Я не первый человек, который хочет сделать что-то подобное. Кто-нибудь может указать мне в правильном направлении?

ответ

1

Попробуйте это:

SELECT TransPK, SUM(Amount) 
FROM tableA 
GROUP BY TransPK 
HAVING COUNT(DISTINCT Currency_ID) = 1; 

Проверить SQL FIDDLE DEMO

ВЫВОД

| TRANSPK | AMOUNT | 
|---------|--------| 
|  1 |  0 | 
|  3 | 3000 | 
+0

SQL требует от меня, чтобы добавить Currency_ID в GROUP BY предложения, и я Я все еще получаю результаты для TransPK = 2 :-(Дарн, этот выглядел так многообещающе !!! – skiaddict1

+0

Удивительно, большое спасибо! – skiaddict1

0

Я думаю, это то, что вы после:

SELECT TransPK, SUM(Amount) AS Amount, Currency_ID 
FROM TableName 
GROUP BY TransPK, Currency_ID 
HAVING COUNT(Currency_ID) > 1 

Результат:

TRANSPK AMOUNT CURRENCY_ID 
1  0  0 

видете в SQL Fiddle.

+0

Я думаю, что это не сработает вообще с моими данными. количество записей (> = 2) в этом представлении. Не будет ли это ограничиваться теми, у которых есть только 2 записи? – skiaddict1

+0

@ skiaddict1: ou попробуйте мой обновленный ответ? '(Currency_ID)> 1 '. –

0

Вам нужно что-то вроде этого

SELECT TransPK, Currency_ID, SUM(Amount) 
FROM Your_Table 
GROUP BY TransPK, Currency_ID 

Для получения дополнительной информации о группе по нескольким столбцам, имеет вид на Using group by on multiple columns