2010-07-29 5 views
1
WITH LatestJob AS (SELECT * FROM(SELECT 
    aId 
    , Position 
    , StartDate 
    , Enddate 
    ,SpecializationId 
    ,ROW_NUMBER() OVER (PARTITION BY aId ORDER BY 
      CASE WHEN Enddate IS NULL THEN 0 ELSE 1 END ASC, 
      (CAST(Enddate as datetime)) DESC) AS RN 
FROM EmploymentDetails ed) E WHERE RN=1 
) 
         ,EarliestStart AS (SELECT aID 
               , sum(DATEDIFF(YEAR,Startdate, isnull(Enddate,getdate()))) AS YearsExperience 
             FROM EmploymentDetails GROUP BY aId) 
         SELECT u.Id,u.FirstName + ' ' + u.LastName AS NAME 
         , lj.Position AS LatestPosition 
         ,aps.cId,aps.ApStatusID as ApplicationStatus,aps.sId as SpecializationId 
         , YearsExperience 
         , ad.ExpectedSalary, REPLACE(ISNULL(Address1, '') + ', ' + ISNULL(Address2, '') + ', ' + ISNULL(City, ''), ', ,', ',') AS Address 
         FROM Users u JOIN LatestJob lj ON u.Id = lj.aid 
        JOIN EarliestStart ye ON ye.aId = u.Id 
        JOIN ApplicantDetails ad ON ad.aId = u.Id 
        JOIN ApplicationStatus aps ON aps.aId=u.Id  


WITH LatestJob AS (SELECT * FROM(SELECT 
    aId 
    , Position 
    , StartDate 
    , Enddate 
    ,SpecializationId  
    ,ROW_NUMBER() OVER (PARTITION BY aId ORDER BY 
      CASE WHEN Enddate IS NULL THEN 0 ELSE 1 END ASC, 
      (CAST(Enddate as datetime)) DESC) AS RN 
FROM EmploymentDetails ed) E WHERE RN=1 
) 
         ,EarliestStart AS (SELECT aID 
               , sum(DATEDIFF(YEAR,Startdate, isnull(Enddate,getdate()))) AS YearsExperience 
             FROM EmploymentDetails GROUP BY aId) 
         SELECT u.Id,u.FirstName + ' ' + u.LastName AS NAME 
         , lj.Position AS LatestPosition 
         , YearsExperience 
         , ad.ExpectedSalary, REPLACE(ISNULL(Address1, '') + ', ' + ISNULL(Address2, '') + ', ' + ISNULL(City, ''), ', ,', ',') AS Address 
         FROM Users u JOIN LatestJob lj ON u.Id = lj.aid 
        JOIN EarliestStart ye ON ye.aId = u.Id 
        JOIN ApplicantDetails ad ON ad.aId = u.Id 
        where u.RoleId=3 
        and u.UserStatusId=1 
        and lj.SpecializationId=38 [email protected] 
+0

Avez-vous essayé d'écrire UNION entre les deux requêtes? –

+0

oui, je l'ai essayé mais j'ai eu une erreur – user335160

+0

Msg 156, niveau 15, état 1, ligne 26 Syntaxe incorrecte près du mot clé 'WITH'. Msg 319, niveau 15, état 1, ligne 26 Syntaxe incorrecte à proximité du mot clé 'with'. Si cette instruction est une expression de table commune ou une clause xmlnamespaces, l'instruction précédente doit être terminée par un point-virgule. – user335160

Répondre

0

Je pense que cela pourrait le faire (j'ai aussi fait un peu plus lisible):

WITH LatestJob AS (
    SELECT * FROM 
     (SELECT 
      aId 
      ,Position 
      ,StartDate 
      ,Enddate 
      ,SpecializationId 
      ,ROW_NUMBER() OVER (PARTITION BY aId ORDER BY 
       (CASE WHEN Enddate IS NULL THEN 0 ELSE 1 END) ASC 
       ,CAST(Enddate AS datetime) DESC 
      ) AS RN 
     FROM 
      EmploymentDetails ed 
     ) E 
    WHERE RN = 1 
    ) 
    ,EarliestStart AS (
     SELECT 
      aID 
      ,SUM(DATEDIFF(YEAR, Startdate, ISNULL(Enddate,GETDATE()))) AS YearsExperience 
     FROM 
      EmploymentDetails 
     GROUP BY 
      aId 
    ) 
    (
    SELECT 
     u.Id 
     ,u.FirstName + ' ' + u.LastName AS NAME 
     ,lj.Position AS LatestPosition 
     ,aps.cId 
     ,aps.ApStatusID AS ApplicationStatus 
     ,aps.sId AS SpecializationId 
     ,YearsExperience 
     ,ad.ExpectedSalary 
     ,REPLACE(ISNULL(Address1, '') + ', ' + ISNULL(Address2, '') + ', ' + ISNULL(City, ''), ', ,', ',') AS Address 
    FROM 
     Users u 
    JOIN 
     LatestJob lj ON u.Id = lj.aid 
    JOIN 
     EarliestStart ye ON ye.aId = u.Id 
    JOIN 
     ApplicantDetails ad ON ad.aId = u.Id 
    JOIN 
     ApplicationStatus aps ON aps.aId=u.Id  
    ) 
UNION ALL 
    (
    SELECT 
     u.Id 
     ,u.FirstName + ' ' + u.LastName AS NAME 
     ,lj.Position AS LatestPosition 
     ,YearsExperience 
     ,ad.ExpectedSalary 
     ,REPLACE(ISNULL(Address1, '') + ', ' + ISNULL(Address2, '') + ', ' + ISNULL(City, ''), ', ,', ',') AS Address 
    FROM 
     Users u 
    JOIN 
     LatestJob lj ON u.Id = lj.aid 
    JOIN 
     EarliestStart ye ON ye.aId = u.Id 
    JOIN 
     ApplicantDetails ad ON ad.aId = u.Id 
    WHERE 
     u.RoleId = 3 
     AND u.UserStatusId = 1 
     AND lj.SpecializationId = 38 [email protected] 
) 

Espérons que je ne perdre aucune information ou copiez-le mal le long de la façon. Il analyse seulement correctement donc je ne suis pas sûr si cela retournera réellement ce que vous souhaitez.

+0

Merci beaucoup ça fonctionne – user335160

0

Effectuez les opérations suivantes:

WITH LatestJob AS (
    SELECT * FROM (
     SELECT 
      aId 
      , Position 
      , StartDate 
      , Enddate 
      ,SpecializationId 
      ,ROW_NUMBER() OVER (PARTITION BY aId ORDER BY 
        CASE WHEN Enddate IS NULL THEN 0 ELSE 1 END ASC, 
        (CAST(Enddate as datetime)) DESC) AS RN 
     FROM EmploymentDetails ed) E WHERE RN=1 
    ) 
), EarliestStart AS (
    SELECT aID, sum(DATEDIFF(YEAR,Startdate, isnull(Enddate,getdate()))) AS YearsExperience 
    FROM EmploymentDetails GROUP BY aId 
) 

    SELECT u.Id,u.FirstName + ' ' + u.LastName AS NAME 
     , lj.Position AS LatestPosition 
     ,aps.cId,aps.ApStatusID as ApplicationStatus,aps.sId as SpecializationId 
     , YearsExperience 
     , ad.ExpectedSalary, REPLACE(ISNULL(Address1, '') + ', ' + ISNULL(Address2, '') + ', ' + ISNULL(City, ''), ', ,', ',') AS Address 
    FROM Users u 
    JOIN LatestJob lj ON u.Id = lj.aid 
    JOIN EarliestStart ye ON ye.aId = u.Id 
    JOIN ApplicantDetails ad ON ad.aId = u.Id 
    JOIN ApplicationStatus aps ON aps.aId=u.Id  

    UNION ALL 

    SELECT u.Id,u.FirstName + ' ' + u.LastName AS NAME 
     , lj.Position AS LatestPosition 
     , '' as cId, '' as ApplicationStatus, '' as SpecializationId 
     , YearsExperience 
     , ad.ExpectedSalary, REPLACE(ISNULL(Address1, '') + ', ' + ISNULL(Address2, '') + ', ' + ISNULL(City, ''), ', ,', ',') AS Address 
    FROM Users u 
    JOIN LatestJob lj ON u.Id = lj.aid 
    JOIN EarliestStart ye ON ye.aId = u.Id 
    JOIN ApplicantDetails ad ON ad.aId = u.Id 
    WHERE u.RoleId=3 
    AND u.UserStatusId=1 
    AND lj.SpecializationId=38 [email protected]