Сумма один ко многим на основе нескольких критериев и СОЕДИНЕНИЯ - PullRequest
0 голосов
/ 08 ноября 2019

Я не уверен, как сформулировать мой вопрос. Но у меня есть 2 разные таблицы, которые нужно объединить для получения результатов.

Table A
--------------------------
Id  |  Field_Id |  Value
--------------------------
1234|     16    |   PO456
1234|      7    |   40
1334|     16    |   PO456
1334|      7    |   20
1246|     16    |   PO679
1246|      7    |   100
1247|     16    |   PO679
1247|      7    |   20
1247|     16    |   PO679
1247|      7    |   40


Table B
--------------
Id  |  Hours | 
--------------
1234|   2
1234|   3
1234|   4
1234|   5
1334|   8
1334|   8
1334|   8
1246|   3
1246|   3
1247|   8
1247|   8

Теперь требуемый результат должен выглядеть следующим образом.

Result
-----------------------
Value  |  Est |  Hours
-----------------------
PO456  |   60 |   38
PO679  |   160|   22

Вот мой sql:

select a.value as "Id", CAST(sum(d.value) AS Decimal(10,2)) as 'Est' 
, COALESCE(sum(b.Hours),0) as "Hours"

from table_a a 
left Join table_b b ON a.Id = b.Id
inner join table_a d ON d.Id = a.Id AND d.Field_Id = '7'
where a.Field_Id =  '16' and a.value <> ' ' 
Group By a.value
ORDER BY a.value  ASC

Теперь мой столбец часов отображается правильно, однако это столбец Est, который возвращает странные данные, как будто числа исчисляются тысячами. Не связано ли это как-то с первой колонкой? Я в основном хочу получить сумму всех идентификаторов с тем же значением a.value на одной строке. Моя работа сейчас заключается в том, что он отображает все идентификаторы, и есть просто несколько значений, и он разбивается по отдельности. Тем не менее, я хочу, чтобы это сжато. Любая помощь будет оценена. Если в моем коде есть незначительные орфографические ошибки (это не настоящий код, код просто переименован из соображений конфиденциальности, мне нужна помощь по логике). Пожалуйста и спасибо.

1 Ответ

0 голосов
/ 08 ноября 2019

Какая сбивающая с толку модель данных! Вы можете сделать это с помощью подзапроса, чтобы получить значение est:

select a16.value, a7.value, 
       sum(b.hours)  
from table_a a16 left join
     (select a16.value,
             sum(a7.value) as est    -- should convert to a number for sum()
      from table_a a16 join
           table_a a7
           on a16.id = a7.id and a7.field_id = 7 and
              a16.field_id = 16
      group by 16.value
     ) a7
     on a16.value = a7.value
     table_b b 
     on a16.Id = b.Id
where a16.field_id = 16
group by a16.value, a7.est;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...