Rapport SQL
Envoyé par: Boutarin ()
Date: lundi 25 février 2013 14:33:28

Bonjour,
Lors de la création de rapport et la fusion de plusieurs tables, je rencontre le problème suivant:
Avec la table "flight" qui est la liste des vols
Et la table "flight_pilot" qui donne le pilote ou les pilotes des vols concernés
Donc dans le cas d'un vol en instruction il y a deux pilotes dans la table "flight_pilot"
Donc dans le resultat j'ai deux lignes pour le même vol, une ligne pour l'élève et une ligne pour l'instructeur
comment faire pour n'avoir qu'une ligne avec les informations des deux ?

Mon rapport:

SELECT flight.id As ID,
start_date AS Date,
aircraft_id AS Avion,
resource.name AS Avion,
CONCAT(FLOOR( duration /600), ':', TIME_FORMAT(SEC_TO_TIME(( duration /600 - FLOOR( duration /600))*3600),'%i')) AS Temps,
departure_location_id AS Depart,
oacid.icao_name AS Depart,
oacia.icao_name AS Arrivee,
pilot_id AS Pilote,
IF ((status_id=1),last_name,'') AS Nom,
IF ((status_id=1),first_name,'') AS Prenom,
IF ((status_id=3),last_name,'') AS Instructeur,
status_id AS Instructeur2,
landing_number AS Atterrissages,
flight_type_id AS 'Type de vol',
IF ((flight_type_id & 1 =0),'','X') AS 'tdp',
IF ((flight_type_id & 2 =0),'','X') AS 'loc',
IF ((flight_type_id & 4 =0),'','X') AS 'nav',
IF ((flight_type_id & 8 =0),'','X') AS 'Inst',
IF ((flight_type_id & 16 =0),'','X') AS 'vdn',
IF ((flight_type_id & 32 =0),'','X') AS 'simu',
IF ((flight_type_id & 64 =0),'','X') AS 'bpt ce rt',
IF ((flight_type_id & 128 =0),'','X') AS 'bpt ce ir',
IF ((flight_type_id & 256 =0),'','X') AS 'conv ce',
IF ((flight_type_id & 512 =0),'','X') AS 'meca'
FROM flight
LEFT JOIN flight_pilot ON flight_pilot.flight_id =flight.id
LEFT JOIN person ON person.id =flight_pilot.pilot_id
LEFT JOIN resource ON resource.id =flight.aircraft_id
LEFT JOIN location AS oacid ON oacid.id = flight.departure_location_id
LEFT JOIN location AS oacia ON oacia.id = flight.arrival_location_id

Merci pour votre aide.

Slts

Re: Rapport SQL
Envoyé par: jtremblet ()
Date: mardi 26 février 2013 03:26:13

Bonjour

SQL est un langage de requete, il n'est pas adapté pour faire des mises en forme.
Pour faire proprement ce que vous souhaitez il faut faire une extraction au format XML et ensuite faire la mise en forme par un langage spécialisé type XSLT

La requete que vous faites ressemble étrangement à celle du carnet de vol disponible dans Vols > Carnet de route

Re: Rapport SQL
Envoyé par: Boutarin ()
Date: mardi 26 février 2013 12:20:24

Je suis arriver à mes fin, en doublan les tables et en faisant le tri des résultats.
C'est proche du carnet de route, mais je vais rajouter d'autre champs pour nos stat interne.
Le traitement dans Excel est simple après avec les filtres.
Le resultat donne la liste de tous les vols
Avec plus qu'une ligne pour les vols en double

SELECT flight.id As ID,
start_date AS Date,
aircraft_id AS Avion,
resource.name AS Avion,
CONCAT(FLOOR( duration /600), ':', TIME_FORMAT(SEC_TO_TIME(( duration /600 - FLOOR( duration /600))*3600),'%i')) AS Temps,
departure_location_id AS Depart,
oacid.icao_name AS Depart,
oacia.icao_name AS Arrivee,
fp1.pilot_id AS Pilote,
IF ((fp1.status_id=1),p1.last_name,'') AS Nom,
IF ((fp1.status_id=1),p1.first_name,'') AS Prenom,
IF ((fp2.status_id=3),p2.last_name,'') AS Instructeur,
fp2.status_id AS Instructeur2,
landing_number AS Atterrissages,
flight_type_id AS 'Type de vol',
IF ((flight_type_id & 1 =0),'','X') AS 'tdp',
IF ((flight_type_id & 2 =0),'','X') AS 'loc',
IF ((flight_type_id & 4 =0),'','X') AS 'nav',
IF ((flight_type_id & 8 =0),'','X') AS 'Inst',
IF ((flight_type_id & 16 =0),'','X') AS 'vdn',
IF ((flight_type_id & 32 =0),'','X') AS 'simu',
IF ((flight_type_id & 64 =0),'','X') AS 'bpt ce rt',
IF ((flight_type_id & 128 =0),'','X') AS 'bpt ce ir',
IF ((flight_type_id & 256 =0),'','X') AS 'conv ce',
IF ((flight_type_id & 512 =0),'','X') AS 'meca'
FROM flight
LEFT JOIN flight_pilot AS fp1 ON fp1.flight_id =flight.id
LEFT JOIN person AS p1 ON p1.id =fp1.pilot_id
LEFT JOIN flight_pilot AS fp2 ON fp2.flight_id =flight.id
LEFT JOIN person AS p2 ON p2.id =fp2.pilot_id
LEFT JOIN resource ON resource.id =flight.aircraft_id
LEFT JOIN location AS oacid ON oacid.id = flight.departure_location_id
LEFT JOIN location AS oacia ON oacia.id = flight.arrival_location_id
WHERE (fp1.status_id=1 AND fp2.status_id=3) OR flight_type_id & 8 =0

Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.
This forum powered by Phorum.