2014-01-15 23 views
1

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

(все, что связано с бизнес-поездками, двумя столами, заполненными платежами, совершаемыми в командировках, а другое - бизнес-поездками, поэтому у первого есть больше строк, чем у другого (есть больше платежей, которые произошло чем Trips)) у меня есть две таблицы, таблица а и В. Таблица

Таблица A выглядит следующим образом

| TableA_ID | TableB_ID | PaymentMethod | ValuePayed | 
| 52  | 1   | Method1  | 23,2  | 
| 21  | 1   | Method2  | 23,2  | 
| 33  | 2   | Method3  | 23,2  | 
| 42  | 1   | Method2  | 14  | 
| 11  | 14  | Method1  | 267  | 
| 42  | 1   | Method2  | 14,7  | 
| 13  | 32  | Method1  | 100,2  | 

Таблица B выглядит следующим образом

| TableB_ID | TravelExpenses | OperatingExpense | 
| 1  | 23   | 12    | 
| 1  | 234   | 24    | 
| 2  | 12   | 7    | 
| 1  | 432   | 12    | 
| 14  | 110   | 12    | 

Я пытаюсь создать меру Table (Таблица C), который выглядит следующим образом:

| TableC_ID | TypeofCost |  Amount  | 
| 1  | Method1   | 100,2   | 
| 2  | Method2   | 52    | 
| 3  | TravelExpenses | 7    | 
| 4  | OperatingExpense| 12    | 
| 5  | Method3   | 12    | 
| 6  | OperatingExpense| 7    | 
| 7  | Method3   | 12    | 

(результаты Суммы должны быть суммированы и Columns - Сотрудник, месяц, TypeofCost Сгруппированных)

Так что я в значительной степени должны группе не только PaymentMethod, которые я получаю из таблицы а, , но и вставить новые значения в группе (TravelExpenses и OperatingExpense)

Может ли кто-нибудь дать мне любую идею о том, как это можно сделать в SQL?

Вот что я пытался до сих пор

SELECT PaymentMethod as TypeofCost 
     ,Sum(ValuePayed) as Amount 
FROM TableA Left Outer Join TableB on TableA.TableB_ID = TableB.TableB_ID 
GROUP PaymentMethod 

UNION 

SELECT 'TravelExpenses' as TypeofCost 
     ,Sum(TableB.TravelExpenses) as Amount 
FROM TableA Left Outer Join TableB on TableA.TableB_ID = TableB.TableB_ID 
GROUP PaymentMethod 

UNION 

SELECT 'OperatingExpense' as TypeofCost 
     ,Sum(TableB.OperatingExpense) as Amount 
FROM TableA Left Outer Join TableB on TableA.TableB_ID = TableB.TableB_ID 
GROUP PaymentMethod 

ответ

1

Это должно быть что-то вроде этого:

Select 
    row_number() OVER(ORDER BY TableB_ID) as 'TableC_ID', 
    u.TypeofCost, 
    u.Amount 
    from (
     Select 
      a.TableB_ID, 
      a.PaymentMethod as 'TypeofCost', 
      SUM(a.ValuePayed) as 'Amount' 
     from 
      Table_A as a 
     group by a.TableB_ID, a.PaymentMethod 

     union 

     Select 
      b1.TableB_ID, 
      'TravelExpenses' as 'TypeofCost', 
      SUM(b1.TravelExpenses) as 'Amount' 
     from 
      Table_B as b1 
     group by b1.TableB_ID 

     union 

     Select 
      b2.TableB_ID, 
      'OperatingExpenses' as 'TypeofCost', 
      SUM(b2.OperatingExpenses) as 'Amount' 
     from 
      Table_B as b2 
     group by b2.TableB_ID 
    ) as u 

EDIT: Сформировать TableC_ID

+0

вот результат этого (например, взятых из одного случая для операционных расходов) 6,00 - 12,00-- 24,0 0-- 36,00-- 48,00 - (отдельные строки) в то время как значение реального суммирования, которое ожидается: 36,00 – gberisha

+0

Большое спасибо за помощь – gberisha

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