2008-10-28 10 views
7

¿Alguien sabe qué está mal con esta consulta?Oracle PL/SQL Query Order Por problema con 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; 

he hecho T-SQL la mayor parte de mi carrera y esto parece correcto para mí, sin embargo, esta consulta es para una base de datos Oracle y sapo simplemente coloca el cursor en la a.DateStored en la Orden por sección. Estoy seguro de que esto es básico para cualquiera que haga PL/SQL.

Gracias!

[EDIT] Para referencia futura, el error dado por SQL * Plus fue: "ORA-01791: no es una expresión seleccionada"

Respuesta

15

Tendrá que modificar la consulta como tal:

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; 

Al hacer una DISTINCT su pedido por las necesidades a ser una de las columnas seleccionadas

2

No importa, la ejecución en SQL Plus me dio una respuesta más informativo. El DateStored tiene que estar en la instrucción de selección por lo que este funciona:

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

Sólo la conclusión de que llegué a ... – Carl

+0

Si va a dejar esta pregunta aquí para referencia futura entonces probablemente tener en cuenta que el error dado es: ORA-01791: no es una expresión seleccionada – Carl

2

Creo que los elementos de la cláusula order by también deben estar en la cláusula select.

+2

Solo para aclarar: Esto es cierto debido a DISTINCT. En muchas consultas, es posible ordenar por una columna que no está en la lista de selección, p. SELECCIONAR nombre FROM emp ORDER BY empid. –