1 pièce(s) jointe(s)
Résumer 2 colonnes en une seule
Bonjour à tous,
L'intitulé du sujet n'est pas très clair, mais j'espère que cela deviendra plus compréhensible avec l'explication qui va suivre.
Je galère un peu sur une requête SQL.
J'ai 5 tables :
- Cable (id_cable)
- Cable_patch(id_cable, id_chambre, id_boite))
- cassette (id_cassette, id_chambre)
- tiroir (id_tiroir, id_boite)
- Position (id_position,id_tiroir, id_cassette)
Et voici ma requête :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
SELECT
cable.id_cable AS id_cable,
COALESCE (F3.nb_fibre3, 0) AS nb_position_cassette,
COALESCE ( F4.nb_fibre4,0) AS nb_position_boite
FROM
cable
LEFT JOIN (
SELECT
cable.id_cable,
COUNT(*) nb_fibre3
FROM
cable
INNER JOIN cable_patch
ON cable.id_cable = cable_patch.id_cable
LEFT JOIN cassette
ON cable_patch.id_chambre = cassette.id_chambre
LEFT JOIN position
ON cassette.id_cassette = position.id_cassette
GROUP BY cable.id_cable
) F3
ON cable.id_cable = F3.id_cable
LEFT JOIN (
SELECT
cable.id_cable,
COUNT (*) nb_fibre4
FROM cable
INNER JOIN cable_patch
ON cable.id_cable = cable_patch.id_cable
LEFT JOIN tiroir
ON cable_patch.id_boite = t_tiroir.id_boite
LEFT JOIN position
ON t_tiroir.id_tiroir = position.id_tiroir
GROUP BY cable.id_cable
) F4
ON cable.id_cable = F4.id_cable |
Cette requête est divisée en 2 "sous-requête", nommée F3 et F4.
La requête F3 va me donner, pour chaque câble, le nombre de "position" possédant un "id_cassette" (en passant par plusieurs jointures : cable vers cable_patch, cable_patch vers cassette, et cassette vers position)
La requête F4 va me donner, pour chaque câble, le nombre de "position" possédant un "id_tiroir" (en passant par plusieurs jointures : cable vers cable_patch, cable_patch vers tiroir, et tiroir vers position)
Du coup, le résultat de ma requête ressemblera à quelque chose comme ça :
Pièce jointe 530534
Ce que j'aimerais faire, c'est donc résumer les champs "chambre_positif" et "boite_positif" en une seule colonne :
Chaque câble ne peut pas avoir à la fois des positions possédant un "id_cassette" et un "id_tiroir". Et pour savoir si un câble va avoir des positions possédant un "id_cassette" ou bien un "id_tiroir", il faut aller voir la table "cable_patch".
Cette table comporte les identifiants de chaque câbles, ainsi que les champs "id_chambre" et "id_boite".
A partir de là, il n'y a que 2 possibilités :
- si, dans la table "cable_patch", un câble possède une valeur "id_chambre", ce câble aura des positions de type "id_cassette" que l'on peut récupérer avec les jointures présentes dans ma requête F3.
- si, dans la table "cable_patch", un câble possède une valeur "id_boite", ce câble aura des positions de type "id_tiroir" que l'on peut récupérer avec les jointures présentes dans ma requête F4.
J'aimerais donc avoir une seule colonne qui me donnerait, pour chaque câble, le nombre de "position" de type "id_cassette" (en allant donc voir si ce câble possède une valeur "id_chambre" dans la table "cable_patch")
OU
qui me donnerait, pour un câble ne possédant aucune valeur "id_chambre" dans "cable_patch", le nombre de "position" de type "id_tiroir" (en allant donc voir si ce câble possède une valeur "id_boite" dans la table "cable_patch").
J'espère que toutes ces explications ne sont pas trop longue et/ou trop compliquées. Pour résumé, j'aimerais juste transformer mes 2 "sous-requêtes" F3 et F4 qui me donnent deux champs différents en une seule requête qui me donnerait un seul champs.
Merci d'avance à ceux qui me liront, et n'hésitez pas à me dire si mon problème n'est pas suffisamment clair