ORA-00904 "identifiant Invalide” pour un identificateur dans une clause group by
avec compiere base de données, je suis en train ro montrer
entre deux dates.
colonne:
désignation
qté vente (dépôt de la) client ventes
qté-vente, les vendeurs de vente livreur
-total qté
valeur de chiffre d'affaires par produit
pourquoi cette requête
SELECT p.name AS design,
p.M_PRODUCT_CATEGORY_ID,
il.PRICEACTUAL AS price,
bp.C_BPARTNER_ID AS idpartner,
CASE
WHEN i.IsReturnTrx = 'N'
THEN SUM(il.linenetamt)
ELSE SUM(il.linenetamt)*-1
END AS netHT,
CASE
WHEN i.IsReturnTrx = 'N'
THEN SUM((il.linenetamt + (il.linenetamt * t.rate /100)))
ELSE SUM((il.linenetamt + (il.linenetamt * t.rate /100)))*-1
END AS netTTC,
(SELECT il.qtyinvoiced
FROM C_InvoiceLine il
WHERE bp.ISCUSTOMER ='Y'
AND bp.ISACTIVE ='Y'
AND bp.C_BPARTNER_ID= 19999
) AS qtydepot,
(SELECT qtyinvoiced
FROM C_InvoiceLine il
WHERE bp.ISCUSTOMER ='Y'
AND bp.C_BPARTNER_ID= 18888
) AS qtyliv,
org.description AS orgname,
loc2.address1,
loc2.address2,
loc2.address3,
loc2.address4,
loc2.city,
loc2.postal,
oi.phone,
oi.phone2,
oi.fax,
i.DATEINVOICED AS dat
FROM C_InvoiceLine il
INNER JOIN M_PRODUCT p
ON(p.M_PRODUCT_ID = il.M_PRODUCT_ID)
INNER JOIN C_INVOICE i
ON (i.C_INVOICE_ID = il.C_INVOICE_ID)
INNER JOIN C_BPARTNER bp
ON (bp.C_BPARTNER_ID = i.C_BPARTNER_ID)
INNER JOIN AD_Org org
ON (i.AD_Org_ID = org.AD_Org_ID)
INNER JOIN C_Tax t
ON (t.C_Tax_ID = il.C_Tax_ID)
INNER JOIN ad_orginfo oi
ON (org.ad_org_id=oi.ad_org_id)
INNER JOIN c_location loc2
ON (oi.c_location_id=loc2.c_location_id)
--WHERE i.DateInvoiced BETWEEN $P{Date1} AND $P{Date2}
--AND
--i.DocStatus in ('CO','CL')
--AND i.IsSoTrx = 'Y'
--AND p.isstocked='Y'
GROUP BY p.name ,
p.M_PRODUCT_CATEGORY_ID,
il.QTYINVOICED,
il.PRICEACTUAL,
i.DATEINVOICED,
bp.C_BPARTNER_ID,
org.description,
loc2.address1,
loc2.address2,
loc2.address3,
loc2.address4,
loc2.city,
loc2.postal,
oi.phone,
oi.phone2,
oi.fax,
i.IsReturnTrx,
i.dateinvoiced,
qtyliv,
qtydepot
ORDER BY p.name ,
i.dateinvoiced ;
me donne cette erreur:
ORA-00904: "QTYLIV" : identificateur non valide
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Erreur à la ligne 75, colonne 3
- Pouvez-vous essayer de minimiser le SQL, de sorte que vous pouvez voir où vient l'erreur?
- probleme est ici (SÉLECTIONNEZ-il.qtyinvoiced DE C_InvoiceLine il OÙ bp.ISCUSTOMER ='Y' ET bp.Est actif ='Y' ET bp.C_BPARTNER_ID= 19999 ) COMME qtydepot, (SÉLECTIONNEZ qtyinvoiced DE C_InvoiceLine il OÙ bp.ISCUSTOMER ='Y' ET bp.C_BPARTNER_ID= 18888 ) COMME qtyliv,
- L'erreur est à la ligne 75, qui est quand vous vous référez à
qtyliv
dans leGROUP BY
, et non pas dans une sous-requête elle-même. - je ne peux pas faire Tapis si vous pouvez modifier le code et de le donner à moi
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas se référer à un alias de colonne dans le même niveau de SQL, sauf dans le
order by
clause.À partir de la documentation (italiques ajoutés):
Lorsque vous vous référez à
QTYLIV
dans leGROUP BY
cluase la liste de sélection n'a pas encore été évalué et l'alias n'existe pas. Ce est juste la façon dont la requête est interprétée et exécutée.Quand vous avez des expressions complexes dans la liste de sélection, il est souvent plus simple de les envelopper dans une sélection externe et de faire le regroupement par la suite:
Avis que vous n'utilisez pas l'origine des alias de table dans le
GROUP BY
ouORDER BY
des clauses de la sélection externe, comme ceux qui sont plus étendue.Le problème est (au moins) dans le
group by
clause. Oracle ne permet pas les alias de colonne dansgroup by
. Vous pouvez facilement corriger cela avec une sous-requête:En d'autres termes, de tout mettre, mais le
group by
etorder by
dans une sous-requête. Ensuite, mettre ces clauses dans la requête externe.as qtyliv
définit un alias de colonne (appeléeqtyliv
). Vous ne pouvez pas l'utiliser dans l'group by
clause directement. Alors, mettez votre requête d'origine, déduction faite de lagroup by
etorder by
dans une sous-requête. Et puis mettre ces clauses dans la requête externe.