Artikkeliin on koottu tyypillisiä projektien rakenteeseen ja projektien huomioihin liittyviä poiminnan esimerkkejä
Löydät tietokantataulujen sarakekuvaukset täältä
Tyypilliset poissaolojen poiminnan esimerkit ovat tässä artikkelissa, työajan poiminta tässä artikkelissa ja henkilötietojen poiminnan esimerkit tässä artikkelissa.
Poimitaan projektikoodit halutussa järjestyksessä riippumatta niiden syöttöjärjestyksessä
Esimerkissä poimitaan OverrideProjectCode1 arvoksi sen projektin koodi, jonka tyyppi on '4'. Lisäksi poimitaan OverrideProjectCode2 arvoksi sen projektin koodi, jonka tyyppi on 'Ulkoiset'
SELECT *, CASE WHEN ProjectType1 = '4' THEN ProjectCode1 WHEN ProjectType2 = '4' THEN ProjectCode2 WHEN ProjectType3 = '4' THEN ProjectCode3 WHEN ProjectType3 = '4' THEN ProjectCode4 ELSE 'NOTFOUND' END AS OverrideProjectCode1, CASE WHEN ProjectType1 = 'Ulkoiset' THEN ProjectCode1 WHEN ProjectType2 = 'Ulkoiset' THEN ProjectCode2 WHEN ProjectType3 = 'Ulkoiset' THEN ProjectCode3 WHEN ProjectType4 = 'Ulkoiset' THEN ProjectCode4 ELSE 'NOTFOUND' END AS OverrideProjectCode2 FROM UserSalaryData WHERE CompensationType = 'BasicTime'
Poimitaan aika projektien julkisten huomautuksien ja nimien kanssa
This query adds the project notes and project name for salary data with up to two overlapping projects and because we group by the notes as well as the project, then no note information will be lost in the grouping and summing. There are not dedicated columns for this sort of information in most integrations so you could consider doing something like a overriding the Comment or CustomData fields.
SELECT
UserSalaryData.*,
SUM(amount) as OverrideAmount,
ProjectOverlap1.PublicNotes as PublicProjectNotes1,
ProjectData1.Name as ProjectName1,
ProjectOverlap2.PublicNotes as PublicProjectNotes2,
ProjectData2.Name as ProjectName2
FROM
UserSalaryData
LEFT JOIN UserEventProjectData as ProjectOverlap1
ON UserSalaryData.EventProjectRowId1 = ProjectOverlap1.Id
LEFT JOIN ProjectData as ProjectData1
ON ProjectOverlap1.ProjectId = ProjectData1.Id
LEFT JOIN UserEventProjectData as ProjectOverlap2
ON UserSalaryData.EventProjectRowId2 = ProjectOverlap2.Id
LEFT JOIN ProjectData as ProjectData2
ON ProjectOverlap2.ProjectId = ProjectData2.Id
WHERE
CompensationType = 'BasicTime'
GROUP BY
SalaryRenderingDate,
ProjectId1,
ProjectId2,
ProjectOverlap1.PublicNotes,
ProjectOverlap2.PublicNotes
Poimitaan projektin kaikki yläprojektit
Kysely poimii tapahtumalle kirjatun projektin puurakenteen seuraavasti:
- Projekti 1 - juuritason projekti
- Projekti 2 - juuritason projektin alaprojekti
- Projekti 3 - edellisen projektin alaprojekti
- Projekti 4 - edellisen projektin alaprojekti
Jos projektitasoja on esimerkiksi kolme:
- Projekti 3 -tiedossa on tapahtumalle kirjattu projekti
- Projekti 2 -tiedossa on projekti 3:n yläprojekti
- Projekti 1 -tiedossa on projekti 2:n yläprojekti ja projekti on juuritason projekti
WITH RECURSIVE ProjectRecursive (Id, Depth, Code, Name, ExternalId, TypeInternalName, ParentId, AssignedProjectId)
AS (
SELECT Id, Depth, Code, Name, ExternalId, TypeInternalName, ParentId, Id AS AssignedProjectId
FROM ProjectData WHERE IsAssignedProject = 'Y'
UNION ALL
SELECT p.Id, p.Depth, p.Code, p.Name, p.ExternalId, p.TypeInternalName, p.ParentId, r.AssignedProjectId
FROM ProjectData p
JOIN ProjectRecursive r ON (r.ParentId = p.Id)
WHERE r.Depth > p.Depth
)
SELECT s.*,
p1.Id AS OverrideProjectId1,
p2.Id AS OverrideProjectId2,
p3.Id AS OverrideProjectId3,
p4.Id AS OverrideProjectId4,
p1.ExternalId AS OverrideProjectExternalIdentifier1,
p2.ExternalId AS OverrideProjectExternalIdentifier2,
p3.ExternalId AS OverrideProjectExternalIdentifier3,
p4.ExternalId AS OverrideProjectExternalIdentifier4,
p1.TypeInternalName AS OverrideProjectType1,
p2.TypeInternalName AS OverrideProjectType2,
p3.TypeInternalName AS OverrideProjectType3,
p4.TypeInternalName AS OverrideProjectType4,
p1.Code AS OverrideProjectCode1,
p2.Code AS OverrideProjectCode2,
p3.Code AS OverrideProjectCode3,
p4.Code AS OverrideProjectCode4,
p1.Name AS OverrideProjectName1,
p2.Name AS OverrideProjectName2,
p3.Name AS OverrideProjectName3,
p4.Name AS OverrideProjectName4
FROM UserSalaryData s
LEFT JOIN ProjectRecursive p1 ON (s.ProjectId1 = p1.AssignedProjectId AND p1.Depth = 0)
LEFT JOIN ProjectRecursive p2 ON (s.ProjectId1 = p2.AssignedProjectId AND p2.Depth = 1)
LEFT JOIN ProjectRecursive p3 ON (s.ProjectId1 = p3.AssignedProjectId AND p3.Depth = 2)
LEFT JOIN ProjectRecursive p4 ON (s.ProjectId1 = p4.AssignedProjectId AND p4.Depth = 3)
WHERE s.CompensationType = 'BasicTime'