Je tente d'obtenir certains enregistrements d'une table en fonction de certains facteurs. L'un des facteurs est simplement avec des champs sur la même table, l'autre est en rejoignant une autre table, je veux comparer le nombre d'enregistrements dans la table jointe à un champ sur la première table. Voici un exemple de code.SQL Sélectionner où ou avoir
select * from tDestinations D
left join tLiveCalls LC on LC.DestinationID = D.ID
where D.ConfigurationID = 1486
AND (D.Active = 1 AND D.AlternateFail > GETDATE())
-- Having COUNT(LC.ID) = D.Lines
maintenant du code ci-dessus je ne peux pas avoir la fonction de comptage dans la clause where, et je ne peux pas avoir un champ dans la clause having sans qu'il soit dans une fonction.
Je manque probablement quelque chose de très simple ici. Mais je ne peux pas comprendre.
Toute aide est appréciée.
EDIT: Je m'excuse d'avoir expliqué la structure des tables, les destinations sont des enregistrements uniques, que la table LiveCalls peut contenir plusieurs enregistrements en fonction de l'ID de destination (clé étrangère).
Merci beaucoup pour votre aide. Mon dernier code:
select D.ID, D.Description, D.Lines, D.Active, D.AlternateFail, D.ConfigurationID, COUNT(LC.ID) AS LiveCalls from tDestinations D
left join tLiveCalls LC on LC.DestinationID = D.ID
where D.ConfigurationID = @ConfigurationID
AND (D.Active = 1 AND D.AlternateFail > GETDATE())
GROUP BY D.ID, D.Description, D.Lines, D.Active, D.AlternateFail, D.ConfigurationID
HAVING COUNT(LC.ID) <= D.Lines
'WHERE' traite les lignes, 'HAVING' traite les groupes, voir ceci: http://stackoverflow.com/a/1131076/65223 Les fonctions d'agrégation fonctionnent sur les groupes. Par conséquent, ils doivent être dans le «HAVING» et non le «WHERE» –