OVH Cloud OVH Cloud

Besoin d'aide sur une requête probablement simple...

4 réponses
Avatar
llopht
Salut à tous,

J'ai une base avec deux tables du genre (c'est un exemple) :

tblVilles (IdVille , strNom, bitGrandeVille, ...)

tblHabitants (IdHabitant, IdVille, strNom, ...)


Je veux le nombre d'habitants par ville. Je fais donc :

SELECT
count(tblHabitants.IdHabitant),
tblVilles.IdVille
FROM
tblHabitants
INNER JOIN tblVilles ON tblHabitants.IdVille = tblVilles.IdVille
GROUP BY
tblVilles.IdVille


Maintenant comment faire ma requête pour renseigner automatiquement le
champs bitGrandeVille si le nombre d'habitant dépasse 10000 personnes ???

Merci pour l'aide !

llopht.

4 réponses

Avatar
Fred BROUARD
Bonjour,

UPDATE tblVilles
SET bitGrandeVille = 1
FROM tblVilles V
INNER JOIN tblHabitants H
ON V.IdVille = H.IdVille
GROUP BY V.IdVille
HAVING COUNT(H.IdHabitant) >= 10000

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************




llopht a écrit :
Salut à tous,

J'ai une base avec deux tables du genre (c'est un exemple) :

tblVilles (IdVille , strNom, bitGrandeVille, ...)

tblHabitants (IdHabitant, IdVille, strNom, ...)


Je veux le nombre d'habitants par ville. Je fais donc :

SELECT
count(tblHabitants.IdHabitant),
tblVilles.IdVille
FROM
tblHabitants
INNER JOIN tblVilles ON tblHabitants.IdVille = tblVilles.IdVille
GROUP BY
tblVilles.IdVille


Maintenant comment faire ma requête pour renseigner automatiquement le
champs bitGrandeVille si le nombre d'habitant dépasse 10000 personnes ???

Merci pour l'aide !

llopht.


Avatar
llopht
Parfait sauf qu'il me dit :

Syntaxe incorrecte vers le mot clé 'GROUP'.

Il y a moyen de remettre en même temps les autres à 0 si
count(IdHabitatnt) < 10000 ? Ou faut il faire deux requetes ?

Fred BROUARD a écrit :
Bonjour,

UPDATE tblVilles
SET bitGrandeVille = 1
FROM tblVilles V
INNER JOIN tblHabitants H
ON V.IdVille = H.IdVille
GROUP BY V.IdVille
HAVING COUNT(H.IdHabitant) >= 10000

A +




Avatar
Gilles LE BARBIER
UPDATE tblVilles
SET bitGrandeVille = CASE WHEN (select COUNT(H.IdHabitant) FROM
tblHabitants H where H.idville = tblVilles.idville) >= 10000 THEN 1 ELSE 0
END

Gilles
Avatar
Gilles LE BARBIER
Ou encore :-)

UPDATE tblVilles SET bitGrandeVille = (select
CASE WHEN COUNT(H.IdHabitant) >= 10000
THEN 1
ELSE 0
END
FROM tblHabitants H where H.idville = tblVilles.idville)

Gilles