Créer des vues pour des Requêtes Sql [Résolu/Fermé]

Signaler
Messages postés
14
Date d'inscription
vendredi 24 juin 2016
Statut
Membre
Dernière intervention
10 février 2018
-
Messages postés
14
Date d'inscription
vendredi 24 juin 2016
Statut
Membre
Dernière intervention
10 février 2018
-
Bonjour;

Cette requête contient une projection et un filtrage et aprés la création de vue et lors de l’exécution du requête j'ai cette erreur :

ERROR 1054 (42S22): Unknown column 'l_quantity' in 'field list'

V1 : Q1_Project_lineitem



Create view Q1_Project_lineitem As select  l_returnflag ,l_linestatus, sum(l_quantity) as sum_qty,sum(l_extendedprice) as sum_base_price,sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 +l_tax)) as sum_charge,avg(l_quantity) as avg_qty,avg(l_extendedprice) as avg_price,avg(l_discount) as avg_disc,count(*) as count_order from lineitem   group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus;




select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price,  sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from Q1_Project_lineitem group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus;



V2 :Q1_Filter_lineitem

 Create view Q1_Filter_lineitem As select * from lineitem where  l_shipdate <= date '1998-12-01' - interval '1' day ;


select * from Q1_Filter_lineitem  where l_shipdate <= date '1998-12-01' - interval '1' day ;


Merci de me répondre a ma question

1 réponse

Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
983
Bonjour,

Si tu définis une vue, c'est justement pour ne pas avoir besoin de rappeler les fonctions et clauses qui permettent son obtention.

Dans ta v1, tu as défini Q1_Project_lineitem avec les colonnes l_returnflag, l_linestatus, sum_qty, sum_base_price, sum_disc_price, sum_charge, avg_qty, avg_price, avg_disc et count_order

Tous les autres noms de colonnes, ceux issus de la table d'origine, sont inconnus dans la vue. De plus, la clause GROUP BY est déjà incluse, pas besoin de la rajouter.

Ta requête doit être, tout simplement :
SELECT l_returnflag, l_linestatus, sum_qty, sum_base_price, sum_disc_price, sum_charge, avg_qty, avg_price, avg_disc, count_order
FROM Q1_Filter_lineitem


Dans ta v2, même remarque : le WHERE est déjà donné dans la vue, pas la peine de le rajouter :
select * from Q1_Filter_lineitem
aura le même effet.

Xavier
Messages postés
14
Date d'inscription
vendredi 24 juin 2016
Statut
Membre
Dernière intervention
10 février 2018

Merci