SQL-запрос для объединения двух таблиц - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть 2 таблицы со следующей структурой: Таблица1, которая содержит Оценочную стоимость, и Таблица2, которая содержит поле Фактическая стоимость и Задача в Таблице2, является внешним ключом, основанным на бюджете Таблицы1. Поле задачи, мне нужно написать запрос и просмотреть, чтобы получить следующую таблицу результатов, которая предоставляет мне сумму Estimated_Cost и сумму Actual_cost детали категории.

Table1:

+------+----------+----------------+
| Task | Category | Estimated_Cost |
+------+----------+----------------+
|    1 |     9100 |         100.00 |
|    2 |     9100 |          15.00 |
|    3 |     9100 |           6.00 |
|    4 |     9200 |           8.00 |
|    5 |     9200 |          11.00 |
+------+----------+----------------+

Table2:

+---------+------+-------------+
| Voucher | Task | Actual_Cost |
+---------+------+-------------+
|       1 |    1 |       10.00 |
|       2 |    1 |       20.00 |
|       3 |    1 |       15.00 |
|       4 |    2 |       32.00 |
|       5 |    4 |        8.00 |
|       6 |    5 |        3.00 |
|       7 |    5 |        4.00 |
+---------+------+-------------+

Таблица результатов:

+----------+----------------+-------------+
| Category | Estimated_Cost | Actual_Cost |
+----------+----------------+-------------+
|     9100 |         121.00 |       77.00 |
|     9200 |          19.00 |       15.00 |
+----------+----------------+-------------+

Ответы [ 5 ]

0 голосов
/ 30 апреля 2018

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

select at1.Category, at1.Estimated_Cost, at2.Actual_Cost from (
select t1.Category, sum(t1.Estimated_Cost) as Estimated_Cost from Table1 t1
group by t1.Category) at1
left join (
select t1.Category, sum(t2.Actual_Cost) as Actual_Cost from Table2 t2 join Table1 t1 on t2.Task = t1.Task
group by t1.Category) at2
on at1.Category = at2.Category
0 голосов
/ 30 апреля 2018
select cat as Category,SUM(ecost) as Estimated_Cost,SUM(acost) as Actual_Cost from (SELECT table1.Estimated_Cost as ecost,table1.Category as cat,table2.Task,SUM(table2.Actual_Cost) as acost FROM `table2` join table1 ON
table2.Task = table1.task
GROUP by table2.Task)
as t11 
GROUP by cat
0 голосов
/ 30 апреля 2018

Одним из возможных решений является использование двух group by команд sql, а затем объединение их в соответствии с category

select te.category, sum_estimated_cost, sum_actual_cost
from (
    select 
    select category,
           sum(Estimated_Cost) sum_estimated_cost
    from Table1 t1
    group by t1.category 
) te
join
(
    select category, 
           sum(Actual_Cost) sum_actual_cost
    from Table1 t1, Table2 t1
    where t1.task = t2.task
    groupy by t1.category 
) ta on te.category = ta.category
0 голосов
/ 30 апреля 2018

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

select x.Category Category, y.Estimated_Cost Estimated_Cost, x.Actual_Cost Actual_Cost 
from
(
  select t1.Category Category, sum(a.Actual_Cost) Actual_Cost
  from Actuals a,
  (select distinct Category from Budget) t1
  where a.Task IN (Select Task from Budget where Category = t1.Category)
  group by t1.Category
) x,
(
  select Category, sum(Estimated_Cost) Estimated_Cost
  from Budget
  group by Category
) y
where x.Category = y.Category;

Иллюстрация с предоставленными данными:

select * from Budget;
+------+----------+----------------+
| Task | Category | Estimated_Cost |
+------+----------+----------------+
|    1 |     9100 |         100.00 |
|    2 |     9100 |          15.00 |
|    3 |     9100 |           6.00 |
|    4 |     9200 |           8.00 |
|    5 |     9200 |          11.00 |
+------+----------+----------------+

select * from Actuals;
+---------+------+-------------+
| Voucher | Task | Actual_Cost |
+---------+------+-------------+
|       1 |    1 |       10.00 |
|       2 |    1 |       20.00 |
|       3 |    1 |       15.00 |
|       4 |    2 |       32.00 |
|       5 |    4 |        8.00 |
|       6 |    5 |        3.00 |
|       7 |    5 |        4.00 |
+---------+------+-------------+
 select x.Category Category, y.Estimated_Cost Estimated_Cost, x.Actual_Cost Actual_Cost
  -> from
  -> (
  ->   select t1.Category Category, sum(a.Actual_Cost) Actual_Cost
  ->   from Actuals a,
  ->   (select distinct Category from Budget) t1
  ->   where a.Task IN (Select Task from Budget where Category = t1.Category)
  ->   group by t1.Category
  -> ) x,
  -> (
  ->   select Category, sum(Estimated_Cost) Estimated_Cost
  ->   from Budget
  ->   group by Category
  -> ) y
  -> where x.Category = y.Category;
+----------+----------------+-------------+
| Category | Estimated_Cost | Actual_Cost |
+----------+----------------+-------------+
|     9100 |         121.00 |       77.00 |
|     9200 |          19.00 |       15.00 |
+----------+----------------+-------------+
0 голосов
/ 30 апреля 2018

Вы можете выполнить левое соединение в таблице 1 и таблице 2 в столбце задачи и с помощью сгруппировать по выражению, рассчитать сумму затрат на основе категорий . Ниже приведен запрос

Всего один запрос поможет вам достичь цели.

select Category,sum(distinct(Estimated_Cost)),sum(Actual_Cost)
from Table1 t1 left join Table2 t2
on t1.task = t2.task
groupd by t1.Category 

Просто интересно, даже если задача не является частью таблицы 2, должны ли мы все еще показывать сумму в ориентировочной стоимости?

Надеюсь, это поможет, спасибо.

...