16/11/2024 - sihsandrea ha scritto:
Chi ha fatto quello schema relazionale ha frammentato dati e creato tabelle superflue…
Parti dal dipendente, che diventa tale nel momento in cui popoli la tabella protocollomatr2 con un solo record quindi 1 a 1 a meno che un dipendente non abbia n matricole (ne dubito).
Succede che non forniscono il numero di matricola, in dipendenti ci sono dati anagrafici, in matricola elementi di ufficio.
16/11/2024 - sihsandrea ha scritto:
Progressione presa in carico… beh, a meno che non sia un contratto ad intermittenza mi sa che scrivi un solo record per dipendente.
Cambiano spesso le sedi.
16/11/2024 - sihsandrea ha scritto:
Progressione lavorativa non so cosa indichi ma a me sembra un sinonimo di carriera.. ergo un altro duplicato.
Mi fermo qui…
Le sedi hanno delle sezioni interne, la carriera si riferisce alle qualifiche.
16/11/2024 - sihsandrea ha scritto:
Comincia a lavorare sulle due query e mostrale in modo da capire che logica hanno le tabelle che hai mostrato e perché le que sql non si ottengono con un dato comune.
Fatta la query A e la query B possiamo vedere se si può tentare un select* from A inner join B….
Se si puoi creare una unica sql select di select.
Questo è interessante, non conosco questa procedura, metto il codice SQL di entrambe le query.
Query A:
SELECT Dipendenti.IdDipendente, Dipendenti.Cognome, Dipendenti.Nome, Dipendenti.DataNascita, Dipendenti.idCittaN, Dipendenti.PrNascita, Dipendenti.idCittaRes, Dipendenti.PrRes, Last(Dipendenti.ViaRes) AS UltimoDiViaRes, Last(Dipendenti.CAPRes) AS UltimoDiCAPRes, Dipendenti.sesso, Dipendenti.dataassunzione, Dipendenti.annipiù, Dipendenti.DecRuoloFunz, Last([Progressione PresaInForza].InizioPiF) AS UltimoDiInizioPiF, [Progressione PresaInForza].FinePiF, [Uffici o Sezioni].Ufficio, qualifiche.qualifica, UltimaQualificaDataDeterminata.UltimoDiMaxDiDecorrenza, UltimaQualificaDataDeterminata.UltimoDiCodQualifica, [Progressione PresaInForza].TipoPiF, [Progressione Lavorativa Decorrenza Determinata].MaxDiDecorrenzaL, UltimaQualificaDataDeterminata.UltimoDiRuolo, qualifiche.CatRuolo, IIf([FinePiF] Is Not Null,[FinePiF],DateSerial((Year([DataNascita])+(IIf([UltimoDiCodQualifica] In (52,53,56,67),65,IIf([UltimoDiCodQualifica] In (51,54,57),63,60)))),(Month([DataNascita])+1),1)) AS [Limiti di età], protocolloMatr2.PerID, IIf([UltimoDiCodQualifica] In (52,53,56,67),65,IIf([UltimoDiCodQualifica] In (51,54,57),63,60)) AS EtaPens, Dipendenti.codfisc, [Uffici o Sezioni].Competenza
FROM ((((Dipendenti INNER JOIN UltimaQualificaDataDeterminata ON Dipendenti.IdDipendente = UltimaQualificaDataDeterminata.IdDipend) INNER JOIN qualifiche ON UltimaQualificaDataDeterminata.UltimoDiCodQualifica = qualifiche.kqualifica) INNER JOIN [Progressione PresaInForza] ON Dipendenti.IdDipendente = [Progressione PresaInForza].IdDipendPiF) INNER JOIN (([Progressione Lavorativa] INNER JOIN [Progressione Lavorativa Decorrenza Determinata] ON ([Progressione Lavorativa].DecorrenzaL = [Progressione Lavorativa Decorrenza Determinata].MaxDiDecorrenzaL) AND ([Progressione Lavorativa].IdProgDip = [Progressione Lavorativa Decorrenza Determinata].IdProgDip)) INNER JOIN [Uffici o Sezioni] ON [Progressione Lavorativa].CodUfficio = [Uffici o Sezioni].KUfficio) ON Dipendenti.IdDipendente = [Progressione Lavorativa].IdProgDip) INNER JOIN protocolloMatr2 ON Dipendenti.IdDipendente = protocolloMatr2.dipMatr
GROUP BY Dipendenti.IdDipendente, Dipendenti.Cognome, Dipendenti.Nome, Dipendenti.DataNascita, Dipendenti.idCittaN, Dipendenti.PrNascita, Dipendenti.idCittaRes, Dipendenti.PrRes, Dipendenti.sesso, Dipendenti.dataassunzione, Dipendenti.annipiù, Dipendenti.DecRuoloFunz, [Progressione PresaInForza].FinePiF, [Uffici o Sezioni].Ufficio, qualifiche.qualifica, UltimaQualificaDataDeterminata.UltimoDiMaxDiDecorrenza, UltimaQualificaDataDeterminata.UltimoDiCodQualifica, [Progressione PresaInForza].TipoPiF, [Progressione Lavorativa Decorrenza Determinata].MaxDiDecorrenzaL, UltimaQualificaDataDeterminata.UltimoDiRuolo, qualifiche.CatRuolo, IIf([FinePiF] Is Not Null,[FinePiF],DateSerial((Year([DataNascita])+(IIf([UltimoDiCodQualifica] In (52,53,56,67),65,IIf([UltimoDiCodQualifica] In (51,54,57),63,60)))),(Month([DataNascita])+1),1)), protocolloMatr2.PerID, IIf([UltimoDiCodQualifica] In (52,53,56,67),65,IIf([UltimoDiCodQualifica] In (51,54,57),63,60)), Dipendenti.codfisc, [Uffici o Sezioni].Competenza
HAVING (((Last([Progressione PresaInForza].InizioPiF))<=[Maschere]![Dipendenti]![DataDeterm]) AND (([Progressione PresaInForza].FinePiF)>=[Maschere]![Dipendenti]![DataDeterm]) AND (([Uffici o Sezioni].Competenza) Between [Maschere]![Dipendenti]![Compet1] And [Maschere]![Dipendenti]![Compet2] And ([Uffici o Sezioni].Competenza)<>[Maschere]![Dipendenti]![Compet3])) OR (((Last([Progressione PresaInForza].InizioPiF))<=[Maschere]![Dipendenti]![DataDeterm]) AND (([Progressione PresaInForza].FinePiF) Is Null) AND ((IIf([FinePiF] Is Not Null,[FinePiF],DateSerial((Year([DataNascita])+(IIf([UltimoDiCodQualifica] In (52,53,56,67),65,IIf([UltimoDiCodQualifica] In (51,54,57),63,60)))),(Month([DataNascita])+1),1)))>=[Maschere]![Dipendenti]![DataDeterm]) AND (([Uffici o Sezioni].Competenza) Between [Maschere]![Dipendenti]![Compet1] And [Maschere]![Dipendenti]![Compet2] And ([Uffici o Sezioni].Competenza)<>[Maschere]![Dipendenti]![Compet3]));
Query B:
SELECT QualifichePossedute.IdDipend, Max(QualifichePossedute.Priorità) AS MaxDiPriorità, Last(QualifichePossedute.qualifica) AS UltimoDiqualifica, Last(QualifichePossedute.CodQualifica) AS UltimoDiCodQualifica, Last(QualifichePossedute.QualificaEst) AS UltimoDiQualificaEst, Last(QualifichePossedute.QualificaAbb) AS UltimoDiQualificaAbb, Last(QualifichePossedute.Ruolo) AS UltimoDiRuolo, Last(QualifichePossedute.MaxDiDecorrenza) AS UltimoDiMaxDiDecorrenza
FROM QualifichePossedute
WHERE (((QualifichePossedute.MaxDiDecorrenza)<=[Maschere]![Dipendenti]![DQDeterm]))
GROUP BY QualifichePossedute.IdDipend;
Query C:
SELECT [Progressione Lavorativa].IdProgDip, Max([Progressione Lavorativa].DecorrenzaL) AS MaxDiDecorrenzaL
FROM [Progressione Lavorativa]
WHERE ((([Progressione Lavorativa].DecorrenzaL) Is Null Or ([Progressione Lavorativa].DecorrenzaL)<=[Maschere]![Dipendenti]![DQDeterm]))
GROUP BY [Progressione Lavorativa].IdProgDip;