SQL - Comment définir des variables et
Fermé
phenetas
Messages postés
1108
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
31 août 2017
-
22 févr. 2017 à 19:55
phenetas Messages postés 1108 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 31 août 2017 - 24 févr. 2017 à 15:48
phenetas Messages postés 1108 Date d'inscription mercredi 25 juillet 2007 Statut Membre Dernière intervention 31 août 2017 - 24 févr. 2017 à 15:48
A voir également:
- SQL - Comment définir des variables et
- Définir google comme page d'accueil - Guide
- Récupération serveur sql - Télécharger - Gestion de données
- Définir retrait - Guide
- Requête sql date supérieure à ✓ - Forum Programmation
- Sql replace plusieurs valeurs - Forum Programmation
2 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
22 févr. 2017 à 20:15
22 févr. 2017 à 20:15
Bonjour,
J'ai pas trop réfléchi mais si j'ai bien compris, tu pourrais faire des COUNT de nom_objet (HAVING nom_objet='A' ou 'B' selon) et ce pour chacun des ID_base ce qui te permettrait de savoir combien d'objets A ou B chaque station possède.
J'ai pas trop réfléchi mais si j'ai bien compris, tu pourrais faire des COUNT de nom_objet (HAVING nom_objet='A' ou 'B' selon) et ce pour chacun des ID_base ce qui te permettrait de savoir combien d'objets A ou B chaque station possède.
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
23 févr. 2017 à 10:36
23 févr. 2017 à 10:36
Bonjour,
Le SQL n'a pas besoin de boucles FOR :)
Tu peux réaliser ce que tu veux en une seule requête bien écrite.
Par exemple, quelque chose comme ça :
Pour obtenir le texte résumé, tu peux effectivement réutiliser cette requête comme sous-requête, faire un GROUP BY types_objets avec des COUNT :
Note que cette façon de faire convient tant que tu ne rajoutes pas de nouveaux types d'objets... Cela deviendra plus compliqué si on ne connait pas les types d'objets possibles.
Xavier
Le SQL n'a pas besoin de boucles FOR :)
Tu peux réaliser ce que tu veux en une seule requête bien écrite.
Par exemple, quelque chose comme ça :
SELECT id, nom_station, CASE WHEN nbA = 0 AND nbB = 0 THEN 'Aucun objet' WHEN nbA = 0 AND nbB > 0 THEN 'Que des B' WHEN nbA > 0 AND nbB = 0 THEN 'Que des A' ELSE 'Des A et des B' END as types_objets FROM ( SELECT s.id, s.nom_station, SUM(CASE COALESCE(nom_objet, 'Z') WHEN 'A' THEN 1 ELSE 0 END) as nbA, SUM(CASE COALESCE(nom_objet, 'Z') WHEN 'B' THEN 1 ELSE 0 END) as nbB FROM stations s LEFT OUTER JOIN objet o ON o.id_base = s.id GROUP BY s.id, s.nom_station ) as n
Pour obtenir le texte résumé, tu peux effectivement réutiliser cette requête comme sous-requête, faire un GROUP BY types_objets avec des COUNT :
SELECT types_objets, count(*) FROM ( SELECT id, nom_station, CASE WHEN nbA = 0 AND nbB = 0 THEN 'Aucun objet' WHEN nbA = 0 AND nbB > 0 THEN 'Que des B' WHEN nbA > 0 AND nbB = 0 THEN 'Que des A' ELSE 'Des A et des B' END as types_objets FROM ( SELECT s.id, s.nom_station, SUM(CASE COALESCE(nom_objet, 'Z') WHEN 'A' THEN 1 ELSE 0 END) as nbA, SUM(CASE COALESCE(nom_objet, 'Z') WHEN 'B' THEN 1 ELSE 0 END) as nbB FROM stations s LEFT OUTER JOIN objet o ON o.id_base = s.id GROUP BY s.id, s.nom_station ) as n ) as resume GROUP BY types_objets
Note que cette façon de faire convient tant que tu ne rajoutes pas de nouveaux types d'objets... Cela deviendra plus compliqué si on ne connait pas les types d'objets possibles.
Xavier
phenetas
Messages postés
1108
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
31 août 2017
225
24 févr. 2017 à 15:48
24 févr. 2017 à 15:48
Merci beaucoup Xavier !
Superbe réponse, j'ai beaucoup apprit en décortiquant cette requête.
Superbe réponse, j'ai beaucoup apprit en décortiquant cette requête.
23 févr. 2017 à 09:54
Et pour aller plus loin j'aimerais avoir un résumé du genre :
Il y a X stations avec des objets "A" ET "B"
Il y a Y stations avec des objets "A" uniquement
Il y a N stations avec des objets "B" uniquement
J'imagine que je vais devoir utiliser un COUNT sur les résultats de la requête précédente ?