Внутреннее объединение двух таблиц с совокупным значением столбца - PullRequest
0 голосов
/ 30 июня 2018

Допустим, у меня есть две таблицы: [ReceivingLog] и [Customer_Event]. Пожалуйста, смотрите приведенные ниже таблицы.

Вход

     logId    eventId    customerId    pmCount    pmWeight
       1       1411       4196            1         14
       2       1411       4196            2         14
       3       1411       4198            1         14
       4       1411       4198            1         11
       5       1411       4196            3         10

Customer_Event

     customerId    eventId
       4196         1411 
       4198         1411
       4199         1411

Я бы хотел получить такой результат

     customerId    pmCount    pmWeight
       4196           6          38 
       4198           2          25 
       4199           0           0 

Я пробовал этот запрос ниже, но я получаю повторяющиеся строки

SELECT [Log].customerId, [Log].pmCount, [Log].pmWeight
FROM [Log] INNER JOIN [Customer_Event] ON [Log].eventId = [Customer_Event].eventId
WHERE [Log].eventId = 1411

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

Ответы [ 3 ]

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

Попробуйте, я добавил некоторые примеры данных и попробовал, отлично работает:

drop table if exists #ReceivingLog, #Customer_Event
go 

create table #ReceivingLog
(
logId       int,
eventId     int,
customerId  int,
pmCount     int,
pmWeight    int
);
go 

insert into #ReceivingLog values 
(1, 1411, 4196, 1, 14)
, (2, 1411, 4196, 2, 14)
, (3, 1411, 4198, 1, 14)
, (4, 1411, 4198, 1, 11)
, (5, 1411, 4196, 3, 10)
go 

create table #Customer_Event
(
customerId  int,
eventId     int
);
go 

insert into #Customer_Event values 
  (4196, 1411)
, (4198, 1411)
, (4199, 1411)
go 

select  c.customerId
        , coalesce(sum(r.pmCount), 0) as SumOfPmCount
        , coalesce(sum(r.pmWeight), 0) as SumOfPmWeight
from    #Customer_Event c
left 
join    #ReceivingLog r
        on c.customerId = r.customerId
            and c.eventid = r.eventid
        and c.eventid = 1411
group 
by      c.customerId
go
0 голосов
/ 30 июня 2018

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

Select c.CustomerID, ISNULL(sum(l.pmCount),0), ISNULL(sum(l.pmWeight),0)
from #Customer_Event c
    left join #ReceivingLog l on c.eventId = l.eventID and c.customerId = l.customerId
group by c.CustomerID
0 голосов
/ 30 июня 2018

Я думаю, что это будет работать, не проверено.

Select c.CustomerID, sum(l.pmCount), sum(l.pmWeight)
from Customer_Event c
    left join Log l on c.CustomerID = l.CustomerID and c.eventId = l.eventID
group by c.CustomerID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...