回答

收藏

ORA-00904“无效标识符”,用于group by子句中的标识符

技术问答 技术问答 126 人阅读 | 0 人回复 | 2023-09-13

与compiere数据库,我正在尝试ro show
" r  e3 `4 q# w$ g1 e+ L3 Y在两个日期之间。
# `4 X/ w6 ?! t& y" \5 r; y柱子:
+ I5 W2 w& S/ y! n  _指定% K! z( L( X: G% O. x
数量销售(仓库)客户销售7 }5 r/ v5 y( @0 m/ z- j* k
数量卖家卖送货员
' D5 Q& ~4 }& D) B; x总数量: f, E; O: w& `/ [3 H$ F
产品的营业额' ~& A# _* [& u9 e4 f% M
为什么这个查询# O0 [9 c; K$ l! N8 k9 U5 a% M1 o5 G
SELECT p.name AS design,
" E4 g9 I! b1 [5 u. t  p.M_PRODUCT_CATEGORY_ID,
1 f5 _% V; J" D2 |7 \! Q# p  il.PRICEACTUAL   AS price,
2 v7 I' E  q, p% [7 E5 i  bp.C_BPARTNER_ID AS idpartner,
6 P7 I8 C% K# f8 P6 [& t  CASE
6 r/ K, |& `6 x" j    WHEN i.IsReturnTrx = 'N'8 D9 M! _' d# j! ]/ S( n" W
    THEN SUM(il.linenetamt)
+ a+ Z. A1 H* n7 V& u    ELSE SUM(il.linenetamt)*-15 a; ]# b: M$ C; Q. c1 m& B
  END AS netHT,
, N3 ]) i4 X( k3 n) j/ ]: |  CASE
9 I2 a' B) o( `! ?% |    WHEN i.IsReturnTrx = 'N'
5 F: u/ {; _5 d3 }  I    THEN SUM((il.linenetamt + (il.linenetamt * t.rate /100)))6 b) e6 G7 d% X  g$ `7 T1 ]" S4 a
    ELSE SUM((il.linenetamt + (il.linenetamt * t.rate /100)))*-1
( j( X; n, B: C; [8 I3 E  END AS netTTC,
5 ?/ b& n! r# j7 s  (SELECT il.qtyinvoiced% q% ?' I: `) H; ~+ |( q. I
  FROM C_InvoiceLine il' ^& v5 o5 u  Y. u0 W3 g
  WHERE bp.ISCUSTOMER ='Y'1 [  Q/ h' ?4 R& I: ^6 ]- ?$ L
  AND bp.ISACTIVE     ='Y'' k- e6 m4 M7 S' i/ D
  AND bp.C_BPARTNER_ID= 19999
* f8 Z" p: ?1 U, X  )              AS qtydepot,$ Y+ V% x; _8 k0 O2 L! r& w& z  R
  (SELECT qtyinvoiced# M. d0 u8 Q& u$ |! C
  FROM C_InvoiceLine il5 l+ A% M) D. `1 v5 s. g% L
  WHERE bp.ISCUSTOMER ='Y'
! m3 D( a; X( o  D' G9 C  AND bp.C_BPARTNER_ID= 18888
, e3 u% u; k  s; h' [! t' B( {6 r: X6 g$ K  )               AS qtyliv,  Z) A0 W% [' I& X% G
  org.description AS orgname,
  t  x/ y2 w1 T  loc2.address1,
9 f. ?, {: y, J+ f2 ~7 p  loc2.address2,
; K% U6 \2 R/ \" D  loc2.address3,
+ j0 \* r) ~! S3 Y9 D! S; z  loc2.address4,3 i. K# C; m; ?* U  n3 _
  loc2.city,
! R/ P! ^4 G% D* t$ `  loc2.postal,
9 @. a" @$ \: a: o8 |( c  oi.phone,
9 W0 E. `- U7 h2 ^7 M7 y  oi.phone2,* M* @0 K. ~' B4 W, w7 B  h
  oi.fax,
+ S" o7 W8 }, x) i" r" G" G+ |  i.DATEINVOICED AS dat' H6 J8 d3 f: F% O$ x, _* }
FROM C_InvoiceLine il
0 o6 F+ b& o) ^! pINNER JOIN M_PRODUCT p( O' F2 o4 o2 G4 o
ON(p.M_PRODUCT_ID = il.M_PRODUCT_ID)1 f" ]+ }( k+ \% Y# Z4 ]8 F
INNER JOIN C_INVOICE i
$ m0 q( m- c+ }0 d7 N% ION (i.C_INVOICE_ID = il.C_INVOICE_ID)
5 H9 Z2 B0 |8 f& C' uINNER JOIN C_BPARTNER bp( l- B" @3 `7 u9 A9 M( w
ON (bp.C_BPARTNER_ID = i.C_BPARTNER_ID)
% e. a: r# Y  AINNER JOIN AD_Org org
, P- M: o  ^$ z( u# O+ {( EON (i.AD_Org_ID = org.AD_Org_ID)" i: a1 X* B2 ^
INNER JOIN C_Tax t
4 W3 m" A4 @9 t3 @ON (t.C_Tax_ID = il.C_Tax_ID)
) l9 B5 ^" K& A0 o9 C, MINNER JOIN ad_orginfo oi& Q. T' A' ?9 l8 W
ON (org.ad_org_id=oi.ad_org_id)
% z& F: s* X" v. t2 F5 H' R3 rINNER JOIN c_location loc2
3 S( S6 v1 E6 i, JON (oi.c_location_id=loc2.c_location_id)
/ N0 A8 l- w! I7 \  --WHERE i.DateInvoiced BETWEEN $P{Date1} AND $P{Date2}
' u/ q4 V/ P" X4 i; e  --AND
3 M# n* [0 _2 C" }  --i.DocStatus in ('CO','CL')
- y- ?; V8 V- `9 E, Z7 D* o  --AND i.IsSoTrx = 'Y'
# U3 s4 |  e1 D! e  --AND   p.isstocked='Y'
6 R+ R8 W: A2 O# _& F# u/ rGROUP BY p.name ,
2 A* Y7 y! j4 y4 }2 |/ D  p.M_PRODUCT_CATEGORY_ID,$ u6 {/ `# S! d/ G  I
  il.QTYINVOICED,
3 u4 W6 v& v' G& C  G- b3 A  il.PRICEACTUAL,* ]' `" \6 L8 @# s4 R7 g$ E' K
  i.DATEINVOICED,
- O0 {+ Q; W1 z! y7 {: i% F8 G  bp.C_BPARTNER_ID,
: y  I5 _% i/ @& K9 |. ^, B  org.description,
* \% N7 _- Z; X  loc2.address1,
9 ]( S! l0 g3 [: _% B- [  loc2.address2,
; y! R! b' S5 a3 e2 K/ I  loc2.address3,1 {- ]5 s+ i! \. \0 v5 }! b+ A9 z
  loc2.address4,6 B' P: S$ h& h. g1 x0 l
  loc2.city,
. Y4 F1 D8 c; J/ P  loc2.postal,
1 \$ a# X$ T6 x* B8 B  oi.phone,
8 w7 o% a  r/ P2 L  oi.phone2,4 }+ m" ~" B  ]+ e7 p
  oi.fax,
- `( u# b, o% g9 _' [  i.IsReturnTrx,
2 X# _9 Y' z+ t# x  i.dateinvoiced,; q9 Y' o; t& d0 J5 U7 \1 @
  qtyliv,! _& I  M1 R$ i7 ]+ }8 H
  qtydepot9 y' G& Q9 n( H7 v6 ]
ORDER BY p.name ,. M# S  g  u: H* \0 f
  i.dateinvoiced ;
% Z5 G4 v/ ?' O8 H1 E* O给我这个错误:# L5 Y: J% O0 P: b( w$ p
ORA-00904: "QTYLIV" : identificateur non valide
; a! L& ?5 B3 \: g" ?; o0 g00904. 00000 -  "%s: invalid identifier"
6 w: ^6 g- P8 O- {  [*Cause:    . h/ _. m) P' j$ Y! r1 c* s' j
*Action:: D  b( n" s- C0 F; C
Erreur 脿 la ligne 75, colonne 33 O0 Q+ w0 y4 W! n9 l; R
                3 g/ t/ l) C" M( D$ _0 r) ?. H4 U1 b
解决方案:4 c* ?3 Y' D1 l2 _; F1 _$ ]( h' Z
               
) A1 ?3 c  v, J3 o8 y7 s7 ]
  `9 z& a4 I' `' H! Y# L
% y# t' D: Z" r4 y                除了在order by子句中,您不能在相同级别的SQL中引用列别名。
. G# g: V' Q9 R# Y4 J在文档中(添加了重点):" \  i  ]# g) B  t/ y

+ V0 k# l5 F) U. x/ r# ]您可以使用列别名 c_alias 来标记选择列表中紧接的前一个表达式,以便以新标题显示该列。别名在查询期间有效地重命名了选择列表项。- @$ I! r0 A# C3 s% F+ ]/ A! C
别名可以在ORDER BY子句中使用,但不能在query中的其他子句中使用
1 S' w/ k: s5 K1 ]" ]
) r( q2 V* j7 S3 H+ i# a( E当您QTYLIV在GROUP BY集群中引用时,尚未评估选择列表,并且别名不存在。这就是查询的解析和执行方式。
" O+ s: h% L9 K% }  K# }# S. p- b当你在选择列表中复杂的表达式它往往是最简单的包装,在外部选择做事后??分组:
' b/ V: `% [4 u- X, rSELECT *
  f5 c; o, y8 MFROM (, s2 Y7 c$ o3 K
  SELECT p.name AS design," [' U7 g9 C, T: R$ `/ M: C# }3 P
    p.M_PRODUCT_CATEGORY_ID,- U- L* |! L2 a! n2 C1 l7 K; \
    il.PRICEACTUAL   AS price,
, }# L$ S4 V6 L' d4 K  l2 B: b    bp.C_BPARTNER_ID AS idpartner,
) s6 ^: v* N4 J- A1 b. @    CASE
, Y3 `+ W& |2 ]  ...
# \$ Y: K3 y! H3 K/ T    (SELECT qtyinvoiced
$ V! I7 o6 x$ y! X) r    FROM C_InvoiceLine il
% J% w3 e& p2 |9 J5 s    WHERE bp.ISCUSTOMER ='Y'% h4 `/ ]" x+ ]3 O
    AND bp.C_BPARTNER_ID= 18888: J0 F' l) k2 X2 K9 \, n
    )               AS qtyliv,- H0 b0 a! u- _" W
  ...
# ~& F1 L8 p8 R: H* L, O    i.DATEINVOICED AS dat1 [9 Q! u- c7 y2 a) |3 l
  FROM C_InvoiceLine il' B/ \  X  R5 l
  INNER JOIN M_PRODUCT p' f2 o/ m, r8 i/ S# d2 g
  ...
& d9 U' ~7 z- y( i* o  ON (oi.c_location_id=loc2.c_location_id)3 @4 N6 X" ^& A  j) _+ n9 e
    --WHERE i.DateInvoiced BETWEEN $P{Date1} AND $P{Date2}
1 G5 y  y+ M( j    --AND
' g+ h2 |& n$ }4 U  K- z1 q    --i.DocStatus in ('CO','CL')
5 f3 P$ K. Q6 L# m    --AND i.IsSoTrx = 'Y'5 i: `% M! s3 g/ s
    --AND   p.isstocked='Y'
, ~  S( y% O$ k)
! H# z4 v1 R* R# q5 O  z- t% P1 ^$ `GROUP BY name ,; s1 B, v, u7 U0 Q/ e2 B
  M_PRODUCT_CATEGORY_ID,: w* E: O2 Z+ @
  QTYINVOICED,/ Q$ d' s$ H- r
  PRICEACTUAL,7 Q' B5 w9 g; \" e
...3 u+ l* a3 ^$ |
  qtyliv,; e: |' W8 w" |! y! d4 m# j
  qtydepot9 H. \7 O5 m6 M# F
ORDER BY name ,# e3 N0 T& ]! o; }
  dateinvoiced ;
+ B) A9 U/ D2 P注意,不要在外部select的GROUP BYorORDER BY子句中使用原始的表别名,因为它们不再是作用域。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则