Oracle множественный выбор из одной таблицы - PullRequest
0 голосов
/ 03 июня 2018

У меня есть этот запрос:

SELECT a.SELECTEDID contentId,  
       a.SELECTED_COUNT selectedCount, 
       a.P_ID 
from ( 
   SELECT t1.SELECTEDID, 
          ROUND(SUM(t1.SELECTED_COUNT*(2/3))) SELECTED_COUNT  ,
          t1.P_ID 
   FROM A_SEARCH t1 
   WHERE t1.P_ID = '11' 
   and t1.PERIOD >= ADD_MONTHS(TO_DATE('05/01/2018 12:00 AM', 'MM/DD/YYYY HH12:MI AM'), -3) 
   AND t1.PERIOD < TO_DATE('05/01/2018 12:00 AM', 'MM/DD/YYYY HH12:MI AM')  
   GROUP BY t1.P_ID, t1.SELECTEDID          
 ) a 
 LEFT JOIN 
 (
   SELECT t2.SELECTEDID,  
          ROUND(SUM(t2.SELECTED_COUNT*2)) SELECTED_COUNT ,
          t2.P_ID 
   FROM A_SEARCH t2 
   WHERE t2.P_ID ='11' 
   and t2.PERIOD >= TO_DATE('05/01/2018 12:00 AM', 'MM/DD/YYYY HH12:MI AM')  
   GROUP BY t2.P_ID, t2.SELECTEDID  
 ) b
 on b.P_ID = a.P_ID
 ORDER BY a.SELECTED_COUNT desc;

Таблица:

 P_ID(VARCHAR2),
 P_VALUE(VARCHAR2), 
 SELECTEDID(VARCHAR2), 
 SELECTED_COUNT(NUMBER),
 PERIOD(TIMESTAMP)

Эта строка всегда выбрана

 11,    bb,test22,  2,  01-APR-18 12.00.00.000000000 AM

Эта строка никогда не выбирается

 11,    aa, test,   2,  01-JUN-18 12.00.00.000000000 AM

Я пытаюсь сделать несколько выборок из одной таблицы, а затем упорядочить по результатам.Но почему-то только первый выбор в запросе является successfuk, и первая строка выше выделена.
Но второй LEFT JOIN не перехватывает вторую строку, и я не вижу, что не так.
Как я могувыбрать обе строки?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Вы выбираете только столбцы из a для окончательного вывода:

SELECT a.SELECTEDID contentId,  a.SELECTED_COUNT selectedCount, a.P_ID

Если строка из b соответствует условию соединения, вам также необходимо выбрать столбцы из b вЧтобы отобразить их.Они будут отображаться в той же строке, что и столбцы из соответствующей строки в a.

Вы говорите

Я пытаюсь сделать несколько выборок из одной таблицы, а затем упорядочить поresults

Это означает, что вы хотите получить отдельные выходные строки для результатов подзапросов a и b, что означает, что вы действительно не хотите объединение.

Вместо этого вы можете захотеть UNION из двух подзапросов.

0 голосов
/ 03 июня 2018

Из того, что я могу сказать, ваш запрос эквивалентен:

SELECT t1.SELECTEDID, ROUND(SUM(t1.SELECTED_COUNT*(2/3))) as SELECTED_COUNT, t1.P_ID 
FROM A_SEARCH t1 
WHERE t1.P_ID = 11 AND  -- I removed the single quotes, assuming the column is a number
      t1.PERIOD >= ADD_MONTHS(DATE '2018-05-01', -3) AND
      t1.PERIOD < DATE '2018-05-01'
GROUP BY t1.P_ID, t1.SELECTEDID  ;   

LEFT JOIN может умножить количество строк;Я не считаю это желательным.

Также обратите внимание на упрощение литералов date, используя ключевое слово date.

...