J'essaie de créer une requête SQL qui renvoie un nom d'entreprise. Les employés sont membres des équipes ET des groupes, des équipes et des groupes sont membres des entreprises.Requête de critères croisés
Je dois sélectionner l'entreprise qui a des employés qui sont membres d'une équipe, qui a certains attributs dans leur ensemble.
Comment écrire SQL pour renvoyer les entreprises ayant un ratio membres/membres supérieurs de%? ex équipe A compte seulement 20 employés supérieurs sur 100 membres de l'équipe; il échoue donc et l'entreprise à laquelle appartient l'équipe A doit être retournée.
Je sais que je dois regrouper les employés en fonction de leur équipe, mais d'une manière ou d'une autre, il faut compter les employés qui ont SENIOR = YES contre SENIOR = NO ET retourner l'entreprise à laquelle ils appartiennent. Des idées?
Ils sont des tables MS Access qui contiennent des informations sensibles, mais vous pouvez penser aux tables comme étant mis en place comme suit:
tblBusiness: BID, bname
tblTeam: TID, TNAME, TBusRef
tblEmployee: EID, EName, ETeamRef, EBusRef, ESenior
J'ai littéralement essayé toutes sortes de SQL: j'ai tout fait, du nested SQL à l'agrégation lourde en passant par des expressions contenant count. Le plus proche (je pense) que j'ai obtenu est:
SELECT tblBuisiness.BName FROM tblBuisiness
GROUP BY BName HAVING (
COUNT(SELECT DISTINCT tblEmployee.ETeamRef FROM tblEmployee WHERE ESenior=-1)
/
COUNT(SELECT DISTINCT tblEmployee.ETeamRef FROM tblEmployee)
< 0.5
)
Maintenant, celui-ci pourrait avoir des erreurs de syntaxe (était le presse-papiers), mais je suis allé à travers elle 100x et le plus proche je suis arrivé était « ne peut pas avoir une expression en agrégat "COUNT()/< 0.5" "
Si TeamA de Business1 a 20 membres principaux et 80 membres réguliers, cette requête doit renvoyer Business1.
S'il vous plaît montrer les tableaux que vous travaillez et un examlpe de la sortie désirée. –
Veuillez fournir au moins les structures de table (colonnes, lignes d'échantillons). De préférence, fournissez également au moins un exemple d'une requête échouée pour démontrer l'effort que vous faites. –
Juste remarqué dans votre exemple que vous utilisez 'ESenior = -1'; Est-ce que ça veut dire "-1" plutôt que "1"? J'aurais pensé que si un employé est senior alors "ESenior" serait 1 sinon les non-seniors auraient "ESenior" égal à 0. –