2008-10-28 7 views
7

Czy ktoś wie, co jest nie tak z tym zapytaniem?Oracle PL/SQL Zapytanie Zamówienie przez wydanie z Distinct

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; 

Zrobiłem T-SQL większość mojej kariery, a to wygląda poprawnie mi się jednak to zapytanie jest dla bazy danych Oracle i Toad prostu umieszcza kursor na a.DateStored w Zakonie po sekcji. Jestem pewien, że jest to elementarne dla każdego, kto robi PL/SQL.

Dzięki!

[EDIT] Na przyszłość, błąd podane przez SQL * Plus było: "ORA-01791: nie wybrany wyraz"

Odpowiedz

15

Trzeba będzie zmodyfikować kwerendę jako takie:

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; 

Podczas odrębną zamówienie według potrzeb, aby być jednym z wybrane kolumny.

2

Nevermind, wykonywany w SQL * Plus dał mi odpowiedź bardziej informacyjny. DateStored musi być w select tak to działa:

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

Wystarczy wniosek, że doszedłem do ... – Carl

+0

Jeśli pozostawiając to pytanie tutaj na przyszłość to powinniśmy chyba zauważyć, że błąd jest podane: ORA-01791: nie wybrany wyraz – Carl

2

Uważam, że elementy klauzuli order by muszą znajdować się również w klauzuli select.

+2

prostu do wyjaśnienia: Jest to prawdą z powodu DISTYNKU. W wielu zapytaniach możliwe jest zamówienie przez kolumnę, której nie ma na liście wyboru, np. WYBIERZ nazwę z emp ORDER BY empid. –