Je ne suis pas capable de grouper par table qui a toutes les valeurs identiques mais a deux rangées. Je ne comprends pas quelle est la raison derrière cela.
Après avoir exécuté cette requête, je reçois la table ci-dessous et je veux regrouper la table le long du lot_no. P>
ORA-00904: "LOT_COUNT": invalid identifier 00904. 00000 - "%s: invalid identifier" *Cause: *Action: Error at Line: 19 Column: 34
3 Réponses :
Votre erreur
SUM( (4-(DECODE(c.qty1,0,1,0) + DECODE(c.qty2,0,1,0) + DECODE(c.qty3,0,1,0) + DECODE(c.qty4,0,1,0)))) NON_ZERO_QTY
J'ai essayé ce groupe par c.lot_no; Erreur: pas un groupe par expression
Si cela donne toujours la même erreur .. Je parie qu'il y a une autre colonne dans la requête sans être préfixée avec le bon alias. Mais je pense que vous rencontrez l'ora-00979: pas un groupe par expression
Je ne sais pas, je ne pouvais pas en trouver. La requête est la même que j'ai posté dans la question. Dans votre réponse, ce que vous avez mentionné à propos de la somme (). Pouvez-vous s'il vous plaît élaborer.
Si vous souhaitez regrouper sur lot_no, que voudriez-vous faire avec les valeurs dans "non_zero_qty" dans le groupe par .. Voulez-vous la valeur maximale? Voulez-vous la somme de toutes les valeurs? Il suffit d'ajouter une fonction de groupe autour de la somme de calcul déjà existante (......)
Mais cela change la valeur du compte que je ne veux pas.
De ce que j'ai compris, vous ne pouvez pas se référer également: https://www.techonthenet.com/oracle/errors/ora00904.php
Et, http://www.dba-oracle.com/t_ora_00918_column_ambigify_defined.htm < / p> Assurez-vous de regrouper des colonnes sélectionnées dans l'instruction SELECT. P> après l'erreur: p> remarque la fonction max utilisée dans groupe par code> sur lot_no code> ou lot_count code> et obtenir l'erreur d'identifiant.
Cela peut être parce que vous n'utilisez pas la référence correcte de la colonne. Au lieu de cela, essayez d'utiliser la référence de table spécifique de la requête comme suit: non_zero_qty code> instruction. Vous pouvez utiliser une autre fonction de ce type selon vos besoins. Il peut être somme (), min (), avg (), etc. p> p>
J'ai essayé cela et je reçois une erreur: pas un groupe par expression et cette erreur est à (4- (décodage (C.qty1,0,1,1,0) + décodage (C.qty2,0,1,1,0) + décodage (C.qty3,0,1,0) + décodage (C.qty4,0,1,0))) non_zero_qty
Ouais. Si vous souhaitez regrouper sur non_zero_qty code>, puis ajoutez-le dans le groupe par déclaration. Sinon vous devez le regrouper. À cela, je veux dire que les fonctions de regroupement doivent être utilisées sur toutes les colonnes qui ne sont pas utilisées dans le groupe par déclaration.
J'ai édité le poteau afin que vous puissiez obtenir la juste idée de ce que je dis.
En fait, cela change la valeur du compte que je ne veux pas. Merci de votre aide.
Il y a plusieurs problèmes dans votre requête.
groupe par c.lot_no code> est requis li>
- Deuxième expression dans
Sélectionnez CODE> DOIT être enveloppé dans Somme code> Fonction d'agrégat. (Modifiez l'expression de case code> relève en fonction de l'exigence) LI>
- Utilisez toujours la norme ANSI-JOIN. (Recommandé) li>
ul>
Vérifiez la solution ci-dessous: P>
SELECT
c.LOT_NO LOT_NO
, SUM(CASE WHEN (4-(DECODE(c.qty1,0,1,0) + DECODE(c.qty2,0,1,0) + DECODE(c.qty3,0,1,0) + DECODE(c.qty4,0,1,0))) > 0
THEN 1 ELSE 0 END) NON_ZERO_QTY
, count(c.lot_no) as LOT_COUNT
FROM
CIM.QLDT_6001 a
JOIN CIM.PART_LOT_TBL b ON a.lot_no like '%' || b.old_lot_no || '%'
JOIN CIM.JR_QTY_DETAIL_TBL c ON b.lot_no = c.lot_no
WHERE
c.lot_no = 'F-AJR-111026-603'
AND a.val01 >= 100
GROUP BY c.LOT_NO
Conseil d'aujourd'hui: utilisez toujours la syntaxe code> joindre code> code>. Plus facile à écrire (sans erreur), plus facile à lire et à entretenir, et plus facile à convertir en jointure extérieure si nécessaire!
Pouvez-vous également ajouter le schéma pour les 3 tables et ce que vous attendez comme schéma de la table de sortie?