Besoin d'une requete SQL ou procédure MySQL pour obtenir des données aggregées
Fermé
Dydy225
Messages postés
5
Date d'inscription
vendredi 3 mai 2019
Statut
Membre
Dernière intervention
15 mai 2019
-
13 mai 2019 à 19:22
Dydy225 Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 15 mai 2019 - 15 mai 2019 à 21:26
Dydy225 Messages postés 5 Date d'inscription vendredi 3 mai 2019 Statut Membre Dernière intervention 15 mai 2019 - 15 mai 2019 à 21:26
A voir également:
- Besoin d'une requete SQL ou procédure MySQL pour obtenir des données aggregées
- Mysql community server - Télécharger - Bases de données
- Excel validation des données liste - Guide
- Reinstaller windows sans perte de données - Guide
- Obtenir le script d'une vidéo youtube - Guide
- Trier des données excel - Guide
1 réponse
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié le 15 mai 2019 à 10:20
Modifié le 15 mai 2019 à 10:20
Bonjour,
Il y a peut-être mieux à faire, mais ceci devrait fonctionner. Je rajouterais aussi que n'ayant pas de moteur MySQL sous la main, et vu que ce n'est pas mon SGBD de prédilection, il peut y avoir quelques ajustements à faire.
J'ai voulu le faire en une seule requête. Tu dois sans doute pouvoir créer une fonction qui retourne la valeur pour un couple code/colonne donné, en construisant une requête dynamiquement, ça simplifierait largement cette écriture mais je ne connais pas assez MySQL.
Xavier
Il y a peut-être mieux à faire, mais ceci devrait fonctionner. Je rajouterais aussi que n'ayant pas de moteur MySQL sous la main, et vu que ce n'est pas mon SGBD de prédilection, il peut y avoir quelques ajustements à faire.
WITH gpeA AS (SELECT t.code, t.gpe_a FROM ma_table t INNER JOIN (SELECT code, min(id_acti) as id_acti FROM ma_table WHERE GPE_A <> '' GROUP BY code) a ON t.code = a.code AND t.id_acti = a.id_acti), gpeB AS (SELECT t.code, t.gpe_b FROM ma_table t INNER JOIN (SELECT code, min(id_acti) as id_acti FROM ma_table WHERE GPE_B <> '' GROUP BY code) b ON t.code = b.code AND t.id_acti = b.id_acti), gpeC AS (SELECT t.code, t.gpe_c FROM ma_table t INNER JOIN (SELECT code, min(id_acti) as id_acti FROM ma_table WHERE GPE_C <> '' GROUP BY code) c ON t.code = c.code AND t.id_acti = c.id_acti), gpeD AS (SELECT t.code, t.gpe_d FROM ma_table t INNER JOIN (SELECT code, min(id_acti) as id_acti FROM ma_table WHERE GPE_D <> '' GROUP BY code) d ON t.code = d.code AND t.id_acti = d.id_acti), gpeE AS (SELECT t.code, t.gpe_e FROM ma_table t INNER JOIN (SELECT code, min(id_acti) as id_acti FROM ma_table WHERE GPE_E <> '' GROUP BY code) e ON t.code = e.code AND t.id_acti = e.id_acti), gpeF AS (SELECT t.code, t.gpe_f FROM ma_table t INNER JOIN (SELECT code, min(id_acti) as id_acti FROM ma_table WHERE GPE_F <> '' GROUP BY code) f ON t.code = f.code AND t.id_acti = f.id_acti), gpeG AS (SELECT t.code, t.gpe_g FROM ma_table t INNER JOIN (SELECT code, min(id_acti) as id_acti FROM ma_table WHERE GPE_G <> '' GROUP BY code) g ON t.code = g.code AND t.id_acti = g.id_acti) SELECT DISTINCT t.code, t.C_ID, t.type_a_id, COALESCE(gpeA.gpe_a, '') as gpe_a, COALESCE(gpeB.gpe_b, '') as gpe_b, COALESCE(gpeC.gpe_c, '') as gpe_c, COALESCE(gpeD.gpe_d, '') as gpe_d, COALESCE(gpeE.gpe_e, '') as gpe_e, COALESCE(gpeF.gpe_f, '') as gpe_f, COALESCE(gpeG.gpe_g, '') as gpe_g FROM ma_table t LEFT OUTER JOIN gpeA ON gpeA.code = t.code LEFT OUTER JOIN gpeB ON gpeB.code = t.code LEFT OUTER JOIN gpeC ON gpeC.code = t.code LEFT OUTER JOIN gpeD ON gpeD.code = t.code LEFT OUTER JOIN gpeE ON gpeE.code = t.code LEFT OUTER JOIN gpeF ON gpeF.code = t.code LEFT OUTER JOIN gpeG ON gpeG.code = t.code
J'ai voulu le faire en une seule requête. Tu dois sans doute pouvoir créer une fonction qui retourne la valeur pour un couple code/colonne donné, en construisant une requête dynamiquement, ça simplifierait largement cette écriture mais je ne connais pas assez MySQL.
Xavier
15 mai 2019 à 21:26