2008-10-28 16 views
7

Weiß jemand, was ist los mit dieser Abfrage?Oracle PL/SQL Query Auftrag nach Problem mit 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; 

Ich habe T-SQL- die meisten meiner Karriere gemacht und dies scheint mir richtig, aber diese Abfrage ist für eine Oracle-Datenbank und Toad legt nur den Cursor auf dem a.DateStored im Auftrag von Abschnitt. Ich bin mir sicher, dass dies für jeden, der PL/SQL macht, elementar ist.

Danke!

[EDIT] Für die Zukunft wird der Fehler von SQL * Plus gegeben war: "ORA-01791: kein ausgewählter Ausdruck"

Antwort

15

Sie müssen die Abfrage als solche ändern:

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; 

Wenn ein DISTINCT Ihre Bestellung durch Bedürfnisse Sie einen der sein ausgewählte Spalten.

2

Nevermind, Ausführung in SQL Plus gab mir eine informative Antwort. Die DateStored muss in der select-Anweisung sein, so funktioniert das:

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

nur die Schlussfolgerung, dass ich kam zu ... – Carl

+0

Wenn Sie diese Frage hier für die Zukunft verlassen, dann sollten wir wohl beachten Sie, dass der angegebene Fehler ist: ORA-01791: nicht einen ausgewählten Ausdruck – Carl

2

Ich glaube, dass die Elemente der order by-Klausel auch in der Select-Klausel sein müssen.

+2

Nur um zu klären: Dies ist wegen der DISTINCT wahr. Bei vielen Abfragen ist es möglich, nach einer Spalte zu sortieren, die nicht in der Auswahlliste ist, z. SELECT name FROM emp ORDER BY –