2012-02-21 3 views
1

Привет, у меня очень сложный отбор, сделанный бывшим сотрудником здесь, в нашей компании. Что он делает, так это возврат всего списка заданий, поданных заявителем. Запрос работает нормально, за исключением того, что мне нужно получить только уникальные задания. У меня проблемы с DISTINCT или GROUP BY. Дубликаты происходят из-за того, что таблица, связанная с Работами и Заявителем, имеет дубликаты, которые я не могу что-либо сделать. Так может кто-нибудь помочь мне понять это?
PS: Пожалуйста, не вините в структуре запроса, это не мое. Благодаря!SQL Server GROUPING and DISTINCT

  SELECT 
       J.JobsID, 
       J.JobsHeader, 
       I.IndustryName, 
       J.JobDescription, 
       J.JobBreif, 
       J.JobRequirement, 
       J.JobLocation, 
       (SELECT CASE WHEN J.HideSalary = 1 THEN 'hidden' ELSE J.Salary END) AS 'Salary', 
       J.HideSalary, 
       (SELECT CASE WHEN J.HideCompanyName = 1 THEN 'hidden' ELSE COMP.CompanyName END) AS 'CompanyName', 
       J.HideCompanyName, 
       J.CurrentStatus, 
       J.ExperienceInMonth, 
       J.ExperienceInYear, 
       Q.QualificationName, 
       J.HourID, 
       J.Age, 
      J.Gender, 
      L.CityName, 
      J.UAENationals, 
      J.SeniorExecutive, 
      J.StartDate, 
      J.EndDate, 
      S.SpecizationName, 
      CIRT.SpecizationName AS 'CirtificationName', 
      J.AvailType, 
      J.CreatedOn, 
      J.CreatedBy, 
      J.ModifiedOn, 
      J.ModifiedBy, 
      N.CountryName, 
      --ETJA.CreatedOn AS 'AppliedOn', 
      '12/01/2012' AS 'AppliedOn', 
      ETJA.JobsId AS 'AppliedJobId' 


     FROM dbo.EmployeeToJobsApplied ETJA 
     INNER JOIN dbo.Jobs J ON J.JobsID = ETJA.JobsId 
     INNER JOIN dbo.Employers COMP ON J.CompanyID = COMP.EmployerId 
     LEFT JOIN dbo.Experience E ON J.ExperienceInYear = E.ExperienceID 
     LEFT JOIN dbo.Industry I ON J.JobIndustryId = I.IndustryID 
     LEFT JOIN dbo.Location L ON J.LocationID = L.CityId 
     LEFT JOIN dbo.Qualification Q ON J.QualificationID = Q.QualificationID 
     LEFT JOIN dbo.Nation N ON J.CountryID = N.CountryID 
     LEFT JOIN dbo.Specization S ON J.SpecilizationId = S.SpecizationID 
     LEFT JOIN dbo.Specization CIRT ON J.CirtificationId = CIRT.SpecizationID 
     WHERE ETJA.Applied = 1 AND ETJA.EmployeeId=1 
+0

Ну, вам не нужно использовать GROUPING, потому что вы не используете какие-либо агрегированные функции (сумма, счет и т. Д.). Итак, если вы включаете ключевое слово DISTINCT, какие столбцы возвращают разные значения, чтобы вы получали дубликаты заданий? Вам действительно нужны все эти таблицы и все эти значения? – kaj

ответ

0

Вы можете добавить DISTINCT к существующему запросу, но я подозреваю, что выбрано несколько столбцов, которые всегда будут уникальными (например, CreatedOn, ModifiedOn). Таким образом, это вряд ли поможет.

Вам нужно будет создать запрос, который просто возвращает подмножество столбцов, которые у вас есть. Начните с минимального минимума и убедитесь, что он дает вам правильный список заданий. Затем добавьте дополнительные столбцы - если он перестанет возвращать отдельные задания, то вы не сможете использовать этот столбец в этом запросе.

SELECT DISTINCT 
    J.JobsID, 
    J.JobsHeader 
FROM dbo.EmployeeToJobsApplied ETJA 
    INNER JOIN dbo.Jobs J ON J.JobsID = ETJA.JobsId 
WHERE ETJA.Applied = 1 AND ETJA.EmployeeId=1