Bonjour à tous
J'ai besoin de votre aide pour créer une vue afin de rassembler des données:
ma première vue "VIST_DATA" contient une liste des données par machine et par date
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
CREATE OR REPLACE FORCE VIEW "COSWIN"."VIST_DATA" ("EQUIPMENT", "DESCRIPTION", "LIGNE", "ZONE", "CRITIQUE", "FONCTION", "STATUS", "LEVEL_", "DATE_", "NUM_SEMAINE", "NUM_MOIS", "NUM_ANNEE", "T_OUVERTURE", "N_OT", "T_ARRET") AS 
  SELECT EREQ_CODE AS EQUIPMENT,
	 ereq_description AS DESCRIPTION,
   EREQ_PARENT_EQUIPMENT AS LIGNE,
	 EREQ_ZONE AS ZONE,
	 ereq_boolean1 AS CRITIQUE,
	 EREQ_CATEGORY AS FONCTION,
	 EREQ_EQUIPMENT_STATUS AS STATUS,
      CASE 
            WHEN EREQ_LEVEL=1 THEN 'LIGN'
            WHEN EREQ_LEVEL=2 THEN 'EQUIPMENT'
            WHEN EREQ_LEVEL=3 THEN 'TOOLS'
            ELSE 'TEST'
      END
        AS LEVEL_,
   EQFR_DATE1 AS DATE_,
   TO_NUMBER (TO_CHAR (EQFR_DATE1, 'WW')) AS NUM_SEMAINE,
   TO_NUMBER (TO_CHAR (EQFR_DATE1, 'MM')) AS NUM_MOIS,
   TO_NUMBER (TO_CHAR (EQFR_DATE1, 'YYYY')) AS NUM_ANNEE,
   EQFR_NUMBER1 AS T_OUVERTURE,
	 EQFR_NUMBER2 AS N_OT,
	 EQFR_NUMBER3 AS T_ARRET
  FROM EQUIPMENT
    LEFT OUTER JOIN EQUIPMENT_FREE
             ON EQUIPMENT.EREQ_CODE=EQUIPMENT_FREE.EQFR_EQUIPMENT
WHERE EREQ_ENTITY='TPM' AND EREQ_EQUIPMENT_STATUS='N' and EREQ_LEVEL=2 AND EQFR_DATE1 >TO_DATE ('12/31/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
      ORDER BY EQUIPMENT,
               DATE_ desc;
la deuxième vue "VIST_LIGN" est pour but de faire une somme des temps d'ouverture par lignes car si je utilise une somme ordinaire donc le système va me faire une somme globale pour tous les machines par lignes alors que ce résultat est indésirable
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
  CREATE OR REPLACE FORCE VIEW "COSWIN"."VIST_LIGN" ("LIGNE", "DATE_", "TO_LIGNE", "NB_LIGNE") AS 
    select ligne,DATE_, sum(TO_LIGNE) TO_LIGNE, sum(NB) NB_LIGNE
from
( select ligne, date_, MAX(t_ouverture) TO_LIGNE, count(*) NB
from
vist_data
group by ligne, date_
)
group by ligne,DATE_
order by date_ desc;
Donc pour cet effet j'ai créé une requête afin de récupérer toutes les données des deux tables dans une seule vue

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SELECT l.ligne,d.EQUIPMENT,d.DESCRIPTION,d.LIGNE,d.ZONE,d.T_OUVERTURE, d.N_OT, l.to_ligne, d.date_
FROM vist_data d, vist_lign l
WHERE d.LIGNE = l.ligne and D.date_>TO_DATE ('05/07/2019 00:00:00', 'MM/DD/YYYY HH24:MI:SS') AND d.ligne IN ('CMS-LIGN-02','CMS-LIGN-05') 
GROUP BY l.ligne,d.EQUIPMENT,d.DESCRIPTION,d.LIGNE,d.ZONE,d.T_OUVERTURE, d.N_OT, l.to_ligne, d.date_;
alors j'ai rencontré deux problèmes
1) Temps d'exécution trop long
2) Les données récupérées de la table vist_lign sont erronée
3) les enregistrements ce multiple 33 fois par équipement et pour même date

Est ce quelqu'un aurait une idée pour palier à ceci
Merci d'avance de votre aide