2008-10-28 45 views
7

Có ai biết điều gì sai với truy vấn này không?Thứ tự truy vấn Oracle PL/SQL Theo vấn đề với phân biệt

SELECT DISTINCT c.CN as ClaimNumber, 
     a.ItemDate as BillReceivedDate, c.DTN as 
DocTrackNumber 
     FROM ItemData a, 
     ItemDataPage b, 
     KeyGroupData c 
     WHERE a.ItemTypeNum in (112, 113, 116, 172, 189) 
     AND a.ItemNum = b.ItemNum 
     AND b.ItemNum = c.ItemNum 
     ORDER BY a.DateStored DESC; 

Tôi đã làm T-Sql nhất trong sự nghiệp của tôi và điều này có vẻ đúng với tôi, tuy nhiên truy vấn này là dành cho một cơ sở dữ liệu Oracle và Toad chỉ đặt con trỏ trên a.DateStored trong Sắp xếp theo phần. Tôi chắc chắn đây là tiểu học cho bất cứ ai làm PL/SQL.

Cảm ơn!

[EDIT] Để tham khảo trong tương lai, các lỗi do SQL * Plus là: "ORA-01.791: không phải là một biểu hiện chọn"

Trả lời

15

Bạn sẽ cần phải sửa đổi các truy vấn như vậy:

SELECT DISTINCT c.CN as ClaimNumber, 
     a.ItemDate as BillReceivedDate, c.DTN as 
DocTrackNumber, a.DateStored 
     FROM ItemData a, 
     ItemDataPage b, 
     KeyGroupData c 
     WHERE a.ItemTypeNum in (112, 113, 116, 172, 189) 
     AND a.ItemNum = b.ItemNum 
     AND b.ItemNum = c.ItemNum 
     ORDER BY a.DateStored DESC; 

Khi thực hiện một đơn đặt hàng riêng biệt bởi nhu cầu là một trong những các cột được chọn.

2

Nevermind, thực hiện trong SQL Plus đã cho tôi một câu trả lời thông tin mới hơn. Các DateStored cần phải được báo cáo kết quả lựa chọn để làm việc này:

SELECT DISTINCT c.CN as ClaimNumber,   
a.ItemDate as BillReceivedDate, 
c.DTN as DocTrackNumber, 
a.DateStored   
FROM ItemData a,   
ItemDataPage b,   
KeyGroupData c   
WHERE a.ItemTypeNum in (112, 113, 116, 172, 189)   
AND a.ItemNum = b.ItemNum   
AND b.ItemNum = c.ItemNum   
ORDER BY a.DateStored DESC; 
+0

Chỉ cần kết luận rằng tôi đã đến ... – Carl

+0

Nếu bạn để lại câu hỏi này ở đây để tham khảo trong tương lai thì chúng tôi có thể lưu ý rằng lỗi được đưa ra là: ORA-01791: không phải biểu thức được chọn – Carl

2

Tôi tin rằng các phần tử của mệnh đề theo mệnh đề cũng phải nằm trong mệnh đề lựa chọn.

+2

Chỉ cần làm rõ: Điều này đúng vì DISTINCT. Trong nhiều truy vấn, có thể đặt hàng theo cột không có trong danh sách lựa chọn, ví dụ: SELECT tên FROM emp ORDER BY empid. –

Các vấn đề liên quan