Получить DISTINCT записи на INNER JOIN SQL Server - PullRequest
0 голосов
/ 28 июня 2018

У меня есть две таблицы. У меня есть запрос, который соединяет первую таблицу ко второй таблице с помощью предложения INNER JOIN. Результаты показывают, что есть избыточные или дублирующие результаты. В моем примере ниже результаты имеют 4 записи. Я хочу выделить SdiID и ожидаю получить только две записи, поскольку для sdiID есть только две уникальные записи. Я попытался добавить DISTINCT sdiID после выбора, но все же я получил 4 записи. Пожалуйста помоги. Вот мой запрос.

    DECLARE @PageNumber AS INT, @RowspPage AS INT 
        SET @PageNumber = 1 
        SET @RowspPage = 20 
        SELECT totalCount = COUNT(*) OVER(), mailbox.ID as mailboxID, 
          sdi.ID as sdiID
           FROM [SDI].dbo.UserDocumentLocationOutbox mailbox 
           INNER JOIN [SDI].dbo.SDITransaction
           sdi on mailbox.SDITransactionID=sdi.ID 
         INNER JOIN [SYSDB].dbo.DocumentType doc on sdi.DocumentTypeID=doc.ID 
    where mailbox.CommunityID = '9ff10c7a-37f5-4580-9163-6ada55194ca7' 
    and mailbox.UserProfileID = 'f9791614-8cc0-42e3-87d1-53709bc1e099' 
    and doc.CommunityID = '9ff10c7a-37f5-4580-9163-6ada55194ca7' 
    and doc.Active=1 and doc.HideInMailbox=0  
    order by sdi.ProcessedDateTime desc 
OFFSET ((@PageNumber - 1) * @RowspPage) ROWS FETCH NEXT @RowspPage ROWS ONLY

Вот результаты

enter image description here

Ответы [ 2 ]

0 голосов
/ 28 июня 2018
  with cte as (SELECT ROW_NUMBER() over(PARTITION BY sdi.ID order by sdi.ID) as rn,totalCount = COUNT(*) OVER(), mailbox.ID as mailboxID, 
          sdi.ID as sdiID
           FROM [SDI].dbo.UserDocumentLocationOutbox mailbox 
           INNER JOIN [SDI].dbo.SDITransaction
           sdi on mailbox.SDITransactionID=sdi.ID 
         INNER JOIN [SYSDB].dbo.DocumentType doc on sdi.DocumentTypeID=doc.ID 
    where mailbox.CommunityID = '9ff10c7a-37f5-4580-9163-6ada55194ca7' 
    and mailbox.UserProfileID = 'f9791614-8cc0-42e3-87d1-53709bc1e099' 
    and doc.CommunityID = '9ff10c7a-37f5-4580-9163-6ada55194ca7' 
    and doc.Active=1 and doc.HideInMailbox=0  
    order by sdi.ProcessedDateTime desc 
OFFSET ((@PageNumber - 1) * @RowspPage) ROWS FETCH NEXT @RowspPage ROWS ONLY)
select totalCount, mailboxID, sdiID
from cte 
where rn < 2
0 голосов
/ 28 июня 2018

Вы всегда получите 4 результата для этого запроса, так как у вас есть 4 различных значения mailboxID. I.E Каждый из ваших sdiID имеет два связанных идентификатора MailboxID, поэтому они являются отдельными записями. Вы можете удалить один из этих идентификаторов для каждого, выбрав MAX (mailbox.id) в качестве mailboxID или MIN (Mailbox.id) в качестве mailboxID и сгруппировать по идентификатору?

...