Domanda Lista di dipendenti che soddisfano tutti i criteri

alexlauo

Nuovo utente
26 Ottobre 2020
10
1
28
Office 365
0
Buon giorno a tutti,
mi sto bloccando con una specifica query.

PREMESSA
Ogni dipendente ha una serie di skill con un voto da 1 a 5.

Ve la semplifico come:
-Accensione macchina
-Setup macchina
-Pulizia macchina

Quello che vorrei creare è una query che mi faccia vedere i dipendenti che hanno PER OGNUNA delle tre skill un voto maggiore di 3.

Quello che riesco a fare e vedere la lista di record dei dipendenti che hanno almeno una skill con voto maggiore di 3, ma non riesco a filtrare PER OGNUNA.

Avete consigli?
Pensavo di creare una query che mi facesse vedere tutti quelli che hanno almeno una skill minore di 3 e in qualche modo cancellarli dall'elenco di tutti i dipendenti, ma non so se è la strada migliore

Grazie mille a chi potrà dedicarmi del tempo
 

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
34.803
2.445
67
Napoli
2019 Pro Plus
1.033
Sarebbe più semplice per chi volesse rispondere avere a disposizioni un file di esempio con un po' di dati non sensibili e sapere qual è, sulla base di questi dati, il risultato che vuoi ottenere.
 

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
4.489
145
Italy
2019
343
Questo
Quello che vorrei creare è una query che mi faccia vedere i dipendenti che hanno PER OGNUNA delle tre skill un voto maggiore di 3.
e questo
Pensavo di creare una query che mi facesse vedere tutti quelli che hanno almeno una skill minore di 3 e in qualche modo cancellarli dall'elenco di tutti i dipendenti, ma non so se è la strada migliore
sono in contrapposizione.

Spiegati meglio e mostra i campi delle tabelle.
 

alexlauo

Nuovo utente
26 Ottobre 2020
10
1
28
Office 365
0
Questo
Quello che vorrei creare è una query che mi faccia vedere i dipendenti che hanno PER OGNUNA delle tre skill un voto maggiore di 3.
e questo
Pensavo di creare una query che mi facesse vedere tutti quelli che hanno almeno una skill minore di 3 e in qualche modo cancellarli dall'elenco di tutti i dipendenti, ma non so se è la strada migliore
sono in contrapposizione.

Spiegati meglio e mostra i campi delle tabelle.
Riprovo

Il file è questo:
FileDropper

Come vedete ci sono 3 tabelle, dipendenti, elencoskill e skill matrix.

La tabella SkillMatrix assegna ad ogni dipendente una valutazione per ogni skill presente nella tabella ElencoSkill.

Quello che vorrei fare è una query che mi presenti l'elenco dei dipendenti per cui per ogni skill hanno una valutazione pari o superiore a 3.
Nel caso specifico dovrebbe solo farmi vedere il dipendente con codice 3.

Purtroppo non ho idea se esiste una query preimpostata che faccia ciò.

La mia idea era quella di creare l'elenco di tutti i dipendenti che non soddisfacessero tale condizione, quindi vedere tutti i record con valutazione minore di 3.

Fatto ciò con una semplice query raggruppare i record per vedere solo i codiciDipendente (in questo esempio mi verrebbe a crearsi una colonna con i codiciDipendente 1 e 2).

Una volta creato l'elenco dei codiciDipendente confrontarlo con l'elenco della tabella Dipendenti e mostrare solo i dipendenti che non hanno alcuna valutazione sotto il 3 (quindi solo il dipendente con codice 3) e quindi di conseguenza che hanno tutte le valutazioni maggiore o uguale a 3.

é un giro lungo e forse inutile, però non mi vengono altre idee.

Spero di essermi chiarito meglio

Grazie
 

giulianovac

Access/VBA Expert
Staff
9 Giugno 2018
4.489
145
Italy
2019
343
Purtroppo non ho idea se esiste una query preimpostata che faccia ciò.
Non esiste, ovviamente.
Qualsiasi query va costruita in base alle proprie esigenze.
Prova così:
Visual Basic:
SELECT Dipendenti.Nome, [Skill Matrix].Skill, [Skill Matrix].Valutazione
FROM Dipendenti, ElencoSkill INNER JOIN [Skill Matrix] ON ElencoSkill.Skill = [Skill Matrix].Skill
WHERE ((([Skill Matrix].Valutazione)=3));
P.S. Basta usare il QBE di MsAccess per creare query.
 

alexlauo

Nuovo utente
26 Ottobre 2020
10
1
28
Office 365
0
Purtroppo non ho idea se esiste una query preimpostata che faccia ciò.
Non esiste, ovviamente.
Qualsiasi query va costruita in base alle proprie esigenze.
Prova così:
Visual Basic:
SELECT Dipendenti.Nome, [Skill Matrix].Skill, [Skill Matrix].Valutazione
FROM Dipendenti, ElencoSkill INNER JOIN [Skill Matrix] ON ElencoSkill.Skill = [Skill Matrix].Skill
WHERE ((([Skill Matrix].Valutazione)=3));
P.S. Basta usare il QBE di MsAccess per creare query.
Ciao, grazie, ma non fa quanto mi serve.

Ho trovato una possibile soluzione

SQL:
SELECT Dipendenti.ID, Count(SkillMatrix.Skill) AS ConteggioDiSkill
FROM (ElencoSkill INNER JOIN SkillMatrix ON ElencoSkill.Skill = SkillMatrix.Skill) INNER JOIN Dipendenti ON SkillMatrix.Dipendente = Dipendenti.ID
GROUP BY Dipendenti.ID, SkillMatrix.Valutazione
HAVING (((Count(SkillMatrix.Skill))=3)) AND ((SkillMatrix.Valutazione)>=3));
Ora il codice funziona e fa quanto mi serve, il problema è che devo impostare a mano il numero di skill per tradurle in "TUTTE" (in questo caso specifico sono3)

Quello che mi piacerebbe fare è che il numero di skill in elenco skill lo andasse a prendere in automatico, ho provato così

SQL:
SELECT Dipendenti.ID, Count(SkillMatrix.Skill) AS ConteggioDiSkill
FROM (ElencoSkill INNER JOIN SkillMatrix ON ElencoSkill.Skill = SkillMatrix.Skill) INNER JOIN Dipendenti ON SkillMatrix.Dipendente = Dipendenti.ID
GROUP BY Dipendenti.ID, SkillMatrix.Valutazione
HAVING (((Count(SkillMatrix.Skill))=count(elencoSkill.Skill)) AND ((SkillMatrix.Valutazione)>=3));
Ma anche così mi fa vedere nell'elenco il dipendente con codice 2 che ha solo due delle tre skill con punteggio minimo, quindi sicuramente sto sbagliando qualcosa
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!