2015-07-29 10 views
9

Potrzebuję pobrać szczegóły z DB. Czy coś jest nie tak w moim kodzie?ORA-01791: nie WYBRANE wyrażenie

SELECT DISTINCT FNAME, LNAME, MEMBERORG, DAYCOUNT, TIMESTAMP, COUNT(FNAME) AS total,(SELECT COUNT(*) FROM REPORT_VIEW_PAGE) AS tot 
FROM REPORT_VIEW_PAGE 
WHERE ID = '68' AND TYPE = 'node' 
GROUP BY FNAME, LNAME, MEMBERORG, DAYCOUNT, TIMESTAMP 
ORDER BY TITLE ASC 

To daje mi błąd:

ORA-01791: not a SELECTed expression 
01791. 00000 - "not a SELECTed expression" 
*Cause:  
*Action: 
Error at Line: 6 Column: 10 
+3

możliwe duplikat [Korzystanie z DISTINCT powoduje ten błąd: nie wybrany wyrażenie] (http://stackoverflow.com/questions/15275447/using-the-distinct-keyword-causes-this-error- nie-wybrane wyrażenie) – bish

+0

Usunąłem różne od zapytania. Ale teraz jest błąd "ORA-00979: nie wyrażenie GROUP BY 00979. 00000 -" nie jest wyrażeniem GROUP BY " * Przyczyna: * Działanie: Błąd na linii: 6 kolumna: 10' – drup

+1

Nowy błąd mówi ty, że próbujesz "zamówić przez" kolumnę 'title', której nie wybierasz. –

Odpowiedz

26

Problemem tutaj jest kolumna TITLEORDER BY nie jest wybrana w zapytaniu DISTINCT. Ponieważ DISTINCT jest używany, zapytanie SELECT spróbuje pogrupować resultset na podstawie wybranych kolumn.

ORDER BY kolumna nie jest tutaj zaznaczona, nie zapewnia unikalności na resultset i dlatego nie stosuje się ORDER BY.

-1
SELECT DISTINCT FNAME, LNAME, MEMBERORG, DAYCOUNT, TIMESTAMP, total, tot 
FROM 
(
SELECT DISTINCT FNAME, LNAME, MEMBERORG, DAYCOUNT, TIMESTAMP, COUNT(FNAME) AS total,(SELECT COUNT(*) FROM REPORT_VIEW_PAGE) AS tot 
FROM REPORT_VIEW_PAGE 
WHERE ID = '68' AND TYPE = 'node' 
GROUP BY FNAME, LNAME, MEMBERORG, DAYCOUNT, TIMESTAMP 
ORDER BY TITLE ASC 
)