2016-06-03 3 views
-1

мне нужно присоединиться следующие две таблицы:Один ко многим таблице присоединился к сводной таблице

Transactions (multiple rows per person) 
LedgerSummary (Summary table) - one row per person 

Как соединить эти две таблицы, но не получить LedgerSummary данные, прикрепленные к каждой строке сделок? Мне нужны только данные LedgerSummary, прикрепленные к первой строке транзакции на человека (ID).

В обеих этих таблицах есть столбец PersonID, к которому я могу присоединиться. Однако у LedgerSummary есть поле Amount. Сумма SUM (Amount) была бы неправильной, если я выполняю регулярное объединение влево или вправо, потому что, как эти две таблицы связаны. Именно по этой причине я хочу, чтобы сумма отображалась только один раз для каждого человека, а не для каждой строки.

+1

Можете ли вы добавить, какие столбцы у вас есть для каждой таблицы. – scsimon

+0

Готово. Это проблема СУММ (сумма). Я не хочу, чтобы сумма умножалась, потому что таблица транзакций имела более одной строки на человека. – NonProgrammer

ответ

1
;With cteTransactions As 
(
Select *, Row_Number() Over (Partition By IdThatLinksToTransAndLedger, Order By 
    ColumnToGivePriorityOnSelectingOneTransaction) SortOrder 
    From Transactions 
) 
Select * 
    From LedgerSummary L 
    Join (Select * From cteTransactions Where SortOrder = 1) T 
     On L.IdThatLinksToTransAndLedger = T.IdThatLinksToTransAndLedger 

IdThatLinksToTransAndLedger - Вам нужен ключ для Person ColumnToGivePriorityOnSelectingOneTransaction - Приоритет колонка, как правило, дата нисходящей дать самому последними.

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