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]
1
A
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]
Questions connexes
- 1. Comment réécrire cette requête de ne pas utiliser la clause syndicale
- 2. structure syndicale JNA cartographie
- 3. SharePoint 2010: requête syndicale efficace dans les collections de sites?
- 4. Comment faire cette requête?
- 5. Comment accélérer cette requête?
- 6. Comment optimiser cette requête?
- 7. comment optimiser cette requête?
- 8. Comment faire cette requête
- 9. Comment faire cette requête?
- 10. C++ solution sans restriction syndicale
- 11. lignes Différencier dans une table syndicale
- 12. Comment faire cette requête dans une requête?
- 13. xslt valeur de priorité syndicale
- 14. Comment optimiser cette requête SQL?
- 15. Comment générer cette requête sql?
- 16. comment optimiser cette requête mysql?
- 17. Comment optimiser cette requête linq?
- 18. MySQL - Comment simplifier cette requête?
- 19. Comment réparer cette requête MySQL?
- 20. Comment construire cette requête NHibernate
- 21. comment créer cette requête linq
- 22. Comment simplifier cette requête Sql
- 23. Comment faire marcher cette requête?
- 24. Confondu comment cette requête fonctionne
- 25. Comment écrivez-vous cette requête?
- 26. Comment refactoriser cette requête SQL?
- 27. Comment lancer cette requête d'accès?
- 28. comment changer cette requête sql
- 29. Comment écrire cette requête MySQL?
- 30. Comment configurer un prédicat pour cette requête
Avez-vous essayé d'écrire UNION entre les deux requêtes? –
oui, je l'ai essayé mais j'ai eu une erreur – user335160
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