Oracle PL / SQL Query Order By проблема с Distinct - PullRequest
7 голосов
/ 28 октября 2008

Кто-нибудь знает, что не так с этим запросом?

 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-Sql, и мне это кажется правильным, однако этот запрос относится к базе данных Oracle, и Жаба просто устанавливает курсор на a.DateStored в разделе Order By. Я уверен, что это элементарно для любого, кто делает PL / SQL.

Спасибо!

[РЕДАКТИРОВАТЬ] Для дальнейшего использования SQL * Plus сообщило об ошибке: «ORA-01791: не выбрано выражение»

Ответы [ 3 ]

15 голосов
/ 28 октября 2008

Вам нужно будет изменить запрос следующим образом:

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;

Когда вы выполняете DISTINCT, ваш заказ должен быть одним из выбранных столбцов.

2 голосов
/ 28 октября 2008

Я считаю, что элементы порядка order by также должны быть в предложении select.

2 голосов
/ 28 октября 2008

Неважно, выполнение в SQL Plus дало мне более информативный ответ. DateStored должен быть в операторе выбора, чтобы это работало:

    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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...