2012-02-21 40 views
1

嗨,我有一個前僱員在我們公司做的非常複雜的select語句 它做的是返回申請人申請的所有工作列表。 查詢工作正常,但我只需要獲取唯一的工作應用。我在使用DISTINCT或GROUP BY時遇到問題。 重複的發生是因爲與作業和申請人相關的表格有重複的地方,我無法做任何事情。所以任何人都可以幫我解決這個問題嗎? PS:請不要責怪它的查詢結構不是我的。謝謝!SQL Server GROUPING和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,因爲你沒有使用任何聚合函數(sum,count等)。因此,如果您包含DISTINCT關鍵字,哪些列會返回不同的值,以致您獲得重複的作業?你真的需要所有這些表和所有這些值返回? – kaj 2012-02-21 09:44:42

回答

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