Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-00904 Số nhận dạng không hợp lệ ”cho một số nhận dạng trong một nhóm theo mệnh đề

Bạn không thể tham chiếu đến bí danh cột trong cùng một cấp SQL, ngoại trừ theo thứ tự order by mệnh đề.

Từ tài liệu (đã thêm phần nhấn mạnh):

Bạn có thể sử dụng bí danh cột, c_alias , để gắn nhãn biểu thức ngay trước đó trong danh sách chọn để cột được hiển thị với một tiêu đề mới. Bí danh đổi tên hiệu quả mục danh sách đã chọn trong suốt thời gian truy vấn. Bí danh có thể được sử dụng trong ORDER BY mệnh đề, chứ không phải các mệnh đề khác trong truy vấn .

Khi bạn tham khảo QTYLIV trong GROUP BY vì danh sách lựa chọn chưa được đánh giá và bí danh không tồn tại. Đây chỉ là cách truy vấn được phân tích cú pháp và thực thi.

Khi bạn có các biểu thức phức tạp trong danh sách lựa chọn, thường đơn giản nhất là bọc nó trong một lựa chọn bên ngoài và thực hiện nhóm sau đó:

SELECT *
FROM (
  SELECT p.name AS design,
    p.M_PRODUCT_CATEGORY_ID,
    il.PRICEACTUAL   AS price,
    bp.C_BPARTNER_ID AS idpartner,
    CASE
  ...
    (SELECT qtyinvoiced
    FROM C_InvoiceLine il
    WHERE bp.ISCUSTOMER ='Y'
    AND bp.C_BPARTNER_ID= 18888
    )               AS qtyliv,
  ...
    i.DATEINVOICED AS dat
  FROM C_InvoiceLine il
  INNER JOIN M_PRODUCT p
  ...
  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 name ,
  M_PRODUCT_CATEGORY_ID,
  QTYINVOICED,
  PRICEACTUAL,
...
  qtyliv,
  qtydepot
ORDER BY name ,
  dateinvoiced ;

Lưu ý rằng bạn không sử dụng bí danh bảng gốc trong GROUP BY hoặc ORDER BY các mệnh đề trong lựa chọn bên ngoài, vì chúng không còn trong phạm vi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng tổng hợp có các giá trị không chính yếu

  2. Điều gì có thể gây ra lỗi ORA-12519 không liên tục (TNS:không tìm thấy trình xử lý thích hợp)

  3. sử dụng các giá trị được phân tách bằng dấu phẩy bên trong mệnh đề IN cho cột NUMBER

  4. thay đổi cột thả bảng trong cơ sở dữ liệu oracle

  5. dừng lỗi biên dịch trong tập lệnh sqlplus