Получить несбалансированную строку из запроса - PullRequest
0 голосов
/ 11 июня 2018

Сценарий: DD - это информация о депозите, имеющая собственный идентификатор, а D - фактический депозитДетали состоят из операций, выполненных на депозитах.

|-------------|-----------|--------------|--------------|
|      DD     |     D     |    AMOUNT    |    MEMBER    |
|-------------|-----------|--------------|--------------|
|       1     |     1     |    1500.00   |       2      |
|-------------|-----------|--------------|--------------|
|       2     |     1     |   -1500.00   |       2      |
|-------------|-----------|--------------|--------------|
|       3     |     1     |     350.00   |       4      |
|-------------|-----------|--------------|--------------|
|       4     |     2     |    1000.00   |       5      |
|-------------|-----------|--------------|--------------|
|       5     |     2     |   -1000.00   |       5      |
|-------------|-----------|--------------|--------------|
|       6     |     3     |     100.00   |       5      |
|-------------|-----------|--------------|--------------|
|       7     |     3     |     -10.00   |       5      |
|-------------|-----------|--------------|--------------|

Цель состоит в том, чтобы получить строку 3 только, поскольку она содержит информацию о несбалансированной сумме.Моя версия запроса об исключении сбалансированной суммы

SELECT dd,d,amount,SUM(amount) FROM test 
group by dd
having sum(amount)>0

Кажется, он не работает.Кроме того, SQL Fiddle не работает, поэтому я не могу привести правильный пример.Я нашел DB Fiddle , но приведенный выше пример, кажется, не выполняется там.

Также кто-нибудь может сказать, какой тип запроса это будет?

EDIT

Ожидаемый результат:

|-------------|-----------|--------------|--------------|
|      DD     |     D     |    AMOUNT    |    MEMBER    |
|-------------|-----------|--------------|--------------|
|       1     |     1     |    1500.00   |       2      |
|-------------|-----------|--------------|--------------|
|       2     |     1     |   -1500.00   |       2      |
|-------------|-----------|--------------|--------------|
|       3     |     1     |     350.00   |       4      |
|-------------|-----------|--------------|--------------|
|       6     |     3     |     100.00   |       5      |
|-------------|-----------|--------------|--------------|
|       7     |     3     |     -10.00   |       5      |
|-------------|-----------|--------------|--------------|

1 Ответ

0 голосов
/ 11 июня 2018

Попробуйте этот запрос:

select * from tbl
where d in (
    select d from tbl
    group by d
    having sum(amount) <> 0
);

Подзапрос вернет только несбалансированные D с, внешний запрос отфильтрует сбалансированные D с на основе результата подзапроса.

...