2013-04-30 3 views
0

Это было разрешено, мне нужно было объединить 4 таблицы в SQL с двумя столбцами в разных таблицах в отдельности. Я бы всегда получал дубликаты строк до сих пор.SQL 2 столбцы в разных таблицах как разные

У меня есть 4 таблицы, которые я пытаюсь объединить с одним запросом.

Мне нужно создать отчет, который выглядит следующим образом:

quoteid | dateEntered | insuredName | admin initials | quoteType | status | last note usertype

Select quoteID,insuredFirstName,insuredLastName,quoteType,status, firstname, lastname, adminInitial, userType 
from (SELECT Row_Number() Over(Partition by A.quoteid order by A.quoteid) as Row , A.quoteID, A.insuredFirstName, A.insuredLastName, A.quoteType, A.status, B.firstName, B.lastName, left(C.firstName,1) + left(C.lastName,1) as adminInitial, D.userType 
    FROM quotes A 
    INNER JOIN tbl_agents B 
    ON A.createUserID = B.AgentNumber 
    INNER JOIN tbl_admins C 
    ON A.assignedID = C.ID 
    INNER JOIN 
     (SELECT 
      quoteID, userType 
      FROM quote_notes) D 
      ON A.quoteID = D.quoteID) as t where row=1 
+0

Distinct предотвратит дубликаты! – rach

+1

@ user1848739 Использование 'distinct' в этом случае скрывает проблему. –

+0

Да, кажется, что Distinct только удаляет некоторые дубликаты, но так как есть 4 таблицы, возможно, их единственное применение к некоторым? – evade

ответ

1

Попробуйте как этого использовать Row_Number() используя Partition by как это ...

Select quoteID,insuredFirstName,insuredLastName,quoteType,status from (SELECT Row_Number() Over(Partition by quoteid ,Name1 order by quoteid) as Row , A.quoteID, A.insuredFirstName, A.insuredLastName, A.quoteType, A.status, B.firstName, B.lastName, left(C.firstName,1) + left(C.lastName,1) as adminInitial, D.userType 
     FROM quotes A 
     INNER JOIN tbl_agents B 
     ON A.createUserID = B.AgentNumber 
     INNER JOIN tbl_admins C 
     ON A.assignedID = C.ID 
     INNER JOIN 
      (SELECT 
       quoteID, userType 
       FROM quote_notes) D 
       ON A.quoteID = D.quoteID) as t where row=1 
+0

Я дам этот снимок, когда я вернусь в офис в понедельник ~ спасибо – evade

+0

если он работает, не забудьте принять как ответ –

+0

Конечно! Спасибо за вашу помощь. – evade

2

Попробуйте перемещение DISTINCT от inner запроса к outside запроса.

+0

Работала также вне запроса. Всем спасибо! Я обновил сообщение, чтобы указать ответ, который я использовал. – evade

+0

Это получило меня примерно на полпути, принятый ответ показал правильный результат – evade